Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- !!!! The line numbers may not be accurate: I added printfs in my code but stripped them out from the diff here !!!!
- Index: libtransmission/rpc-server.c
- ===================================================================
- --- libtransmission/rpc-server.c (revision 14216)
- +++ libtransmission/rpc-server.c (working copy)
- @@ -543,8 +548,42 @@
- evbuffer_free (buf);
- tr_free (data);
- }
- +enum
- +{
- + CORS_HEADERS_ALL,
- + CORS_HEADERS_MINIMUM
- +};
- static void
- +handle_cors_headers (struct evhttp_request * req, struct tr_rpc_server * server, int headers)
- +{
- + if (server->isWhitelistEnabled)
- + {
- + tr_list * l;
- +
- + for (l=server->whitelist; l!=NULL; l=l->next)
- + {
- + char* mask = l->data;
- + if (tr_wildmat (req->remote_host, mask))
- + break;
- + }
- +
- + if (l != NULL)
- + {
- + const char * origin = evhttp_find_header (req->input_headers, "Origin");
- + evhttp_add_header (req->output_headers, "Access-Control-Allow-Origin", origin);
- + if (headers == CORS_HEADERS_ALL)
- + {
- +#ifdef REQUIRE_SESSION_ID
- + evhttp_add_header (req->output_headers, "Access-Control-Expose-Headers", "X-Transmission-Session-Id");
- +#endif
- + evhttp_add_header (req->output_headers, "Access-Control-Allow-Methods", "GET,POST");
- + }
- + }
- + }
- +}
- +
- +static void
- handle_rpc_from_json (struct evhttp_request * req,
- struct tr_rpc_server * server,
- const char * json,
- @@ -552,6 +591,9 @@
- {
- struct rpc_response_data * data;
- + handle_cors_headers (req, server, CORS_HEADERS_MINIMUM);
- +
- data = tr_new0 (struct rpc_response_data, 1);
- data->req = req;
- data->server = server;
- @@ -682,16 +732,19 @@
- "<p><code>%s: %s</code></p>",
- TR_RPC_SESSION_ID_HEADER, sessionId);
- evhttp_add_header (req->output_headers, TR_RPC_SESSION_ID_HEADER, sessionId);
- + handle_cors_headers (req, server, CORS_HEADERS_MINIMUM);
- send_simple_response (req, 409, tmp);
- tr_free (tmp);
- }
- @@ -705,11 +758,16 @@
- tr_rpc_server * server = vserver;
- tr_address addr;
- if (!server->httpd)
- {
- addr.type = TR_AF_INET;
- addr.addr.addr4 = server->bindAddress;
- server->httpd = evhttp_new (server->session->event_base);
- + evhttp_set_allowed_methods (server->httpd,
- + EVHTTP_REQ_GET |
- + EVHTTP_REQ_POST |
- + EVHTTP_REQ_OPTIONS);
- evhttp_bind_socket (server->httpd, tr_address_to_string (&addr), server->port);
- evhttp_set_gencb (server->httpd, handle_request, server);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement