static void handle_upnp_http_request(struct ezcfg_worker *worker) { struct ezcfg *ezcfg; struct ezcfg_http *http; char *request_uri; ASSERT(worker != NULL); http = (struct ezcfg_http *)ezcfg_worker_get_proto_data(worker); ASSERT(http != NULL); ezcfg = ezcfg_worker_get_ezcfg(worker); request_uri = ezcfg_http_get_request_uri(http); if (request_uri == NULL) { err(ezcfg, "no request uri for HTTP GET method.\n"); send_http_bad_request(worker); return; } if (need_authorization(request_uri) == true && is_authorized(worker) == false) { /* handle authorization */ handle_auth_request(worker); return ; } /* don't need authenticate or has been authenticated */ /* handle SSI enabled web page */ handle_ssi_request(worker); }
static void recv_data_cb (BlockTxServer *server) { int ret = 0; /* Let evbuffer determine how much data can be read. */ int n = evbuffer_read (server->recv_buf, server->data_fd, -1); if (n == 0) { seaf_debug ("Data connection is closed by the client. Transfer done.\n"); server->break_loop = TRUE; return; } else if (n < 0) { seaf_warning ("Read data connection error: %s.\n", evutil_socket_error_to_string(evutil_socket_geterror(server->data_fd))); server->break_loop = TRUE; return; } switch (server->recv_state) { case RECV_STATE_HANDSHAKE: ret = handle_handshake_request (server); break; case RECV_STATE_AUTH: ret = handle_auth_request (server); break; case RECV_STATE_HEADER: ret = handle_block_header (server); if (ret < 0) break; if (server->recv_state == RECV_STATE_CONTENT && server->command == REQUEST_COMMAND_PUT) ret = handle_block_content (server); break; case RECV_STATE_CONTENT: ret = handle_block_content (server); break; } if (ret < 0) server->break_loop = TRUE; }