Lines Matching refs:req

288 void fcgi_init_request(fcgi_request *req, int listen_socket)  in fcgi_init_request()  argument
290 memset(req, 0, sizeof(fcgi_request)); in fcgi_init_request()
291 req->listen_socket = listen_socket; in fcgi_init_request()
292 req->fd = -1; in fcgi_init_request()
293 req->id = -1; in fcgi_init_request()
295 req->in_len = 0; in fcgi_init_request()
296 req->in_pad = 0; in fcgi_init_request()
298 req->out_hdr = NULL; in fcgi_init_request()
299 req->out_pos = req->out_buf; in fcgi_init_request()
302 req->tcp = !GetNamedPipeInfo((HANDLE)_get_osfhandle(req->listen_socket), NULL, NULL, NULL, NULL); in fcgi_init_request()
306 static inline ssize_t safe_write(fcgi_request *req, const void *buf, size_t count) in safe_write() argument
314 if (!req->tcp) { in safe_write()
315 ret = write(req->fd, ((char*)buf)+n, count-n); in safe_write()
317 ret = send(req->fd, ((char*)buf)+n, count-n, 0); in safe_write()
323 ret = write(req->fd, ((char*)buf)+n, count-n); in safe_write()
334 static inline ssize_t safe_read(fcgi_request *req, const void *buf, size_t count) in safe_read() argument
342 if (!req->tcp) { in safe_read()
343 ret = read(req->fd, ((char*)buf)+n, count-n); in safe_read()
345 ret = recv(req->fd, ((char*)buf)+n, count-n, 0); in safe_read()
351 ret = read(req->fd, ((char*)buf)+n, count-n); in safe_read()
431 static int fcgi_get_params(fcgi_request *req, unsigned char *p, unsigned char *end) in fcgi_get_params() argument
493 zend_hash_update(req->env, tmp, eff_name_len+1, &s, sizeof(char*), NULL); in fcgi_get_params()
507 static int fcgi_read_request(fcgi_request *req) in fcgi_read_request() argument
513 req->keep = 0; in fcgi_read_request()
514 req->closed = 0; in fcgi_read_request()
515 req->in_len = 0; in fcgi_read_request()
516 req->out_hdr = NULL; in fcgi_read_request()
517 req->out_pos = req->out_buf; in fcgi_read_request()
518 ALLOC_HASHTABLE(req->env); in fcgi_read_request()
519 zend_hash_init(req->env, 0, NULL, (void (*)(void *)) fcgi_free_var, 0); in fcgi_read_request()
521 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
530 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
543 req->id = (hdr.requestIdB1 << 8) + hdr.requestIdB0; in fcgi_read_request()
548 if (safe_read(req, buf, len+padding) != len+padding) { in fcgi_read_request()
552 req->keep = (((fcgi_begin_request*)buf)->flags & FCGI_KEEP_CONN); in fcgi_read_request()
556 zend_hash_update(req->env, "FCGI_ROLE", sizeof("FCGI_ROLE"), &val, sizeof(char*), NULL); in fcgi_read_request()
560 zend_hash_update(req->env, "FCGI_ROLE", sizeof("FCGI_ROLE"), &val, sizeof(char*), NULL); in fcgi_read_request()
564 zend_hash_update(req->env, "FCGI_ROLE", sizeof("FCGI_ROLE"), &val, sizeof(char*), NULL); in fcgi_read_request()
570 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
583 if (safe_read(req, buf, len+padding) != len+padding) { in fcgi_read_request()
584 req->keep = 0; in fcgi_read_request()
588 if (!fcgi_get_params(req, buf, buf+len)) { in fcgi_read_request()
589 req->keep = 0; in fcgi_read_request()
593 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
595 req->keep = 0; in fcgi_read_request()
610 if (safe_read(req, buf, len+padding) != len+padding) { in fcgi_read_request()
611 req->keep = 0; in fcgi_read_request()
615 if (!fcgi_get_params(req, buf, buf+len)) { in fcgi_read_request()
616 req->keep = 0; in fcgi_read_request()
620 zend_hash_internal_pointer_reset_ex(req->env, &pos); in fcgi_read_request()
621 …while ((key_type = zend_hash_get_current_key_ex(req->env, &str_index, &str_length, &num_index, 0, … in fcgi_read_request()
623 zend_hash_move_forward_ex(req->env, &pos); in fcgi_read_request()
658 if (safe_write(req, buf, sizeof(fcgi_header)+len) != (int)sizeof(fcgi_header)+len) { in fcgi_read_request()
659 req->keep = 0; in fcgi_read_request()
670 int fcgi_read(fcgi_request *req, char *str, int len) in fcgi_read() argument
679 if (req->in_len == 0) { in fcgi_read()
680 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read()
683 req->keep = 0; in fcgi_read()
686 req->in_len = (hdr.contentLengthB1 << 8) | hdr.contentLengthB0; in fcgi_read()
687 req->in_pad = hdr.paddingLength; in fcgi_read()
688 if (req->in_len == 0) { in fcgi_read()
693 if (req->in_len >= rest) { in fcgi_read()
694 ret = safe_read(req, str, rest); in fcgi_read()
696 ret = safe_read(req, str, req->in_len); in fcgi_read()
699 req->keep = 0; in fcgi_read()
702 req->in_len -= ret; in fcgi_read()
706 if (req->in_len == 0) { in fcgi_read()
707 if (req->in_pad) { in fcgi_read()
708 if (safe_read(req, buf, req->in_pad) != req->in_pad) { in fcgi_read()
709 req->keep = 0; in fcgi_read()
723 void fcgi_close(fcgi_request *req, int force, int destroy) in fcgi_close() argument
725 if (destroy && req->env) { in fcgi_close()
726 zend_hash_destroy(req->env); in fcgi_close()
727 FREE_HASHTABLE(req->env); in fcgi_close()
728 req->env = NULL; in fcgi_close()
732 if (is_impersonate && !req->tcp) { in fcgi_close()
737 if ((force || !req->keep) && req->fd >= 0) { in fcgi_close()
739 if (!req->tcp) { in fcgi_close()
740 HANDLE pipe = (HANDLE)_get_osfhandle(req->fd); in fcgi_close()
750 shutdown(req->fd, 1); in fcgi_close()
751 while (recv(req->fd, buf, sizeof(buf), 0) > 0) {} in fcgi_close()
753 closesocket(req->fd); in fcgi_close()
759 shutdown(req->fd, 1); in fcgi_close()
760 while (recv(req->fd, buf, sizeof(buf), 0) > 0) {} in fcgi_close()
762 close(req->fd); in fcgi_close()
764 req->fd = -1; in fcgi_close()
806 int fcgi_accept_request(fcgi_request *req) argument
814 if (req->fd < 0) {
820 if (!req->tcp) {
821 pipe = (HANDLE)_get_osfhandle(req->listen_socket);
822 FCGI_LOCK(req->listen_socket);
830 FCGI_UNLOCK(req->listen_socket);
838 req->fd = req->listen_socket;
839 FCGI_UNLOCK(req->listen_socket);
841 SOCKET listen_socket = (SOCKET)_get_osfhandle(req->listen_socket);
844 int listen_socket = req->listen_socket;
851 FCGI_LOCK(req->listen_socket);
852 req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len);
853 FCGI_UNLOCK(req->listen_socket);
856 if (req->fd >= 0 && !fcgi_is_allowed()) {
857 closesocket(req->fd);
858 req->fd = -1;
864 if (req->fd < 0 && (in_shutdown || errno != EINTR)) {
866 if (req->fd < 0 && (in_shutdown || (errno != EINTR && errno != ECONNABORTED))) {
874 if (req->fd >= 0) {
881 fds.fd = req->fd;
891 fcgi_close(req, 1, 0);
895 if (req->fd < FD_SETSIZE) {
901 FD_SET(req->fd, &set);
904 ret = select(req->fd + 1, &set, NULL, NULL, &tv) >= 0;
906 if (ret > 0 && FD_ISSET(req->fd, &set)) {
909 fcgi_close(req, 1, 0);
912 fcgi_close(req, 1, 0);
921 if (fcgi_read_request(req)) {
923 if (is_impersonate && !req->tcp) {
924 pipe = (HANDLE)_get_osfhandle(req->fd);
926 fcgi_close(req, 1, 1);
931 return req->fd;
933 fcgi_close(req, 1, 1);
938 static inline fcgi_header* open_packet(fcgi_request *req, fcgi_request_type type) argument
940 req->out_hdr = (fcgi_header*) req->out_pos;
941 req->out_hdr->type = type;
942 req->out_pos += sizeof(fcgi_header);
943 return req->out_hdr;
946 static inline void close_packet(fcgi_request *req) argument
948 if (req->out_hdr) {
949 int len = req->out_pos - ((unsigned char*)req->out_hdr + sizeof(fcgi_header));
951req->out_pos += fcgi_make_header(req->out_hdr, (fcgi_request_type)req->out_hdr->type, req->id, len…
952 req->out_hdr = NULL;
956 int fcgi_flush(fcgi_request *req, int close) argument
960 close_packet(req);
962 len = req->out_pos - req->out_buf;
965 fcgi_end_request_rec *rec = (fcgi_end_request_rec*)(req->out_pos);
967 fcgi_make_header(&rec->hdr, FCGI_END_REQUEST, req->id, sizeof(fcgi_end_request));
976 if (safe_write(req, req->out_buf, len) != len) {
977 req->keep = 0;
978 req->out_pos = req->out_buf;
982 req->out_pos = req->out_buf;
986 ssize_t fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len) argument
994 if (req->out_hdr && req->out_hdr->type != type) {
995 close_packet(req);
999 limit = sizeof(req->out_buf) - (req->out_pos - req->out_buf);
1000 if (!req->out_hdr) {
1006 if (!req->out_hdr) {
1007 open_packet(req, type);
1009 memcpy(req->out_pos, str, len);
1010 req->out_pos += len;
1011 } else if (len - limit < sizeof(req->out_buf) - sizeof(fcgi_header)) {
1012 if (!req->out_hdr) {
1013 open_packet(req, type);
1016 memcpy(req->out_pos, str, limit);
1017 req->out_pos += limit;
1019 if (!fcgi_flush(req, 0)) {
1023 open_packet(req, type);
1024 memcpy(req->out_pos, str + limit, len - limit);
1025 req->out_pos += len - limit;
1031 close_packet(req);
1033 open_packet(req, type);
1034 fcgi_make_header(req->out_hdr, type, req->id, 0xfff8);
1035 req->out_hdr = NULL;
1036 if (!fcgi_flush(req, 0)) {
1039 if (safe_write(req, str + pos, 0xfff8) != 0xfff8) {
1040 req->keep = 0;
1049 open_packet(req, type);
1050 fcgi_make_header(req->out_hdr, type, req->id, (len - pos) - rest);
1051 req->out_hdr = NULL;
1052 if (!fcgi_flush(req, 0)) {
1055 if (safe_write(req, str + pos, (len - pos) - rest) != (len - pos) - rest) {
1056 req->keep = 0;
1060 open_packet(req, type);
1061 memcpy(req->out_pos, str + len - rest, rest);
1062 req->out_pos += rest;
1069 int fcgi_finish_request(fcgi_request *req, int force_close) argument
1073 if (req->fd >= 0) {
1074 if (!req->closed) {
1075 ret = fcgi_flush(req, 1);
1076 req->closed = 1;
1078 fcgi_close(req, force_close, 1);
1083 char* fcgi_getenv(fcgi_request *req, const char* var, int var_len) argument
1087 if (!req) return NULL;
1089 if (zend_hash_find(req->env, (char*)var, var_len+1, (void**)&val) == SUCCESS) {
1095 char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val) argument
1097 if (var && req) {
1099 zend_hash_del(req->env, var, var_len+1);
1104 if (zend_hash_update(req->env, var, var_len+1, &val, sizeof(char*), (void**)&ret) == SUCCESS) {