equal
deleted
inserted
replaced
42 struct render_request { |
42 struct render_request { |
43 struct evhttp_request *http_request; |
43 struct evhttp_request *http_request; |
44 |
44 |
45 int headers_sent; |
45 int headers_sent; |
46 |
46 |
47 struct render_multi *render_info; |
47 struct render_remote *render_info; |
48 |
48 |
49 size_t bytes_sent; |
49 size_t bytes_sent; |
50 |
50 |
51 int paused; |
51 int paused; |
52 }; |
52 }; |
54 // cb func prototypes |
54 // cb func prototypes |
55 static void _render_http_written (struct evhttp_request *request, void *arg); |
55 static void _render_http_written (struct evhttp_request *request, void *arg); |
56 |
56 |
57 static void _render_cleanup (struct render_request *ctx) { |
57 static void _render_cleanup (struct render_request *ctx) { |
58 if (ctx->render_info) |
58 if (ctx->render_info) |
59 render_multi_free(ctx->render_info); |
59 render_remote_free(ctx->render_info); |
60 |
60 |
61 free(ctx); |
61 free(ctx); |
62 } |
62 } |
63 |
63 |
64 static void _render_sent (void *arg) { |
64 static void _render_sent (void *arg) { |
79 static void _render_data (struct evbuffer *buf, void *arg) { |
79 static void _render_data (struct evbuffer *buf, void *arg) { |
80 struct render_request *ctx = arg; |
80 struct render_request *ctx = arg; |
81 |
81 |
82 size_t buf_size = EVBUFFER_LENGTH(buf); |
82 size_t buf_size = EVBUFFER_LENGTH(buf); |
83 |
83 |
84 assert(buf_size > 0); // shouldn't happen anymore with the new render_multi |
84 assert(buf_size > 0); // shouldn't happen anymore with the new render_remote |
85 |
85 |
86 // check if we are paused |
86 // check if we are paused |
87 if (ctx->paused) { |
87 if (ctx->paused) { |
88 // we are waiting for the HTTP send buffer to clear, so keep the data in the render buffer |
88 // we are waiting for the HTTP send buffer to clear, so keep the data in the render buffer |
89 printf("render [%p]: delaying data: %zu:%zu bytes\n", ctx, buf_size, ctx->bytes_sent); |
89 printf("render [%p]: delaying data: %zu:%zu bytes\n", ctx, buf_size, ctx->bytes_sent); |
135 struct render_request *ctx = arg; |
135 struct render_request *ctx = arg; |
136 |
136 |
137 printf("render [%p]: lost http connection\n", ctx); |
137 printf("render [%p]: lost http connection\n", ctx); |
138 |
138 |
139 // cancel |
139 // cancel |
140 render_multi_cancel(ctx->render_info); |
140 render_remote_cancel(ctx->render_info); |
141 ctx->render_info = NULL; |
141 ctx->render_info = NULL; |
142 |
142 |
143 _render_cleanup(ctx); |
143 _render_cleanup(ctx); |
144 } |
144 } |
145 |
145 |
150 |
150 |
151 // unpause ourself |
151 // unpause ourself |
152 ctx->paused = 0; |
152 ctx->paused = 0; |
153 |
153 |
154 // any data waiting in the buffer? |
154 // any data waiting in the buffer? |
155 render_multi_flush(ctx->render_info); |
155 render_remote_flush(ctx->render_info); |
156 } |
156 } |
157 |
157 |
158 static void _http_render_execute (struct evhttp_request *request, u_int32_t img_w, u_int32_t img_h) { |
158 static void _http_render_execute (struct evhttp_request *request, u_int32_t img_w, u_int32_t img_h) { |
159 // render request context |
159 // render request context |
160 struct render_request *ctx = calloc(1, sizeof(struct render_request)); |
160 struct render_request *ctx = calloc(1, sizeof(struct render_request)); |
177 |
177 |
178 if (render_region_full(&render)) |
178 if (render_region_full(&render)) |
179 ERROR("render_region_full"); |
179 ERROR("render_region_full"); |
180 |
180 |
181 // initiate the remote render operation |
181 // initiate the remote render operation |
182 if ((ctx->render_info = render_multi(&render, &remote_pool, |
182 if ((ctx->render_info = render_remote(&render, &remote_pool, |
183 &_render_sent, |
183 &_render_sent, |
184 &_render_data, |
184 &_render_data, |
185 &_render_done, |
185 &_render_done, |
186 &_render_fail, |
186 &_render_fail, |
187 ctx |
187 ctx |
188 )) == NULL) |
188 )) == NULL) |
189 ERROR("render_multi"); |
189 ERROR("render_remote"); |
190 |
190 |
191 // set chunk size |
191 // set chunk size |
192 render_multi_set_recv(ctx->render_info, MIN_CHUNK_SIZE, OVERFLOW_BUFFER); |
192 render_remote_set_recv(ctx->render_info, MIN_CHUNK_SIZE, OVERFLOW_BUFFER); |
193 |
193 |
194 // set close cb |
194 // set close cb |
195 evhttp_set_reply_abortcb(request, &_render_http_lost, ctx); |
195 evhttp_set_reply_abortcb(request, &_render_http_lost, ctx); |
196 |
196 |
197 printf("render [%p]: started\n", ctx); |
197 printf("render [%p]: started\n", ctx); |