Lines Matching refs:req

744 	fcgi_request *req = (fcgi_request*)calloc(1, sizeof(fcgi_request));  in fcgi_init_request()  local
745 req->listen_socket = listen_socket; in fcgi_init_request()
746 req->fd = -1; in fcgi_init_request()
747 req->id = -1; in fcgi_init_request()
749 req->in_len = 0; in fcgi_init_request()
750 req->in_pad = 0; in fcgi_init_request()
752 req->out_hdr = NULL; in fcgi_init_request()
753 req->out_pos = req->out_buf; in fcgi_init_request()
756 req->tcp = !GetNamedPipeInfo((HANDLE)_get_osfhandle(req->listen_socket), NULL, NULL, NULL, NULL); in fcgi_init_request()
760 req->nodelay = 0; in fcgi_init_request()
763 fcgi_hash_init(&req->env); in fcgi_init_request()
765 return req; in fcgi_init_request()
768 void fcgi_destroy_request(fcgi_request *req) in fcgi_destroy_request() argument
770 fcgi_hash_destroy(&req->env); in fcgi_destroy_request()
771 free(req); in fcgi_destroy_request()
774 static inline ssize_t safe_write(fcgi_request *req, const void *buf, size_t count) in safe_write() argument
782 if (!req->tcp) { in safe_write()
783 ret = write(req->fd, ((char*)buf)+n, count-n); in safe_write()
785 ret = send(req->fd, ((char*)buf)+n, count-n, 0); in safe_write()
791 ret = write(req->fd, ((char*)buf)+n, count-n); in safe_write()
802 static inline ssize_t safe_read(fcgi_request *req, const void *buf, size_t count) in safe_read() argument
810 if (!req->tcp) { in safe_read()
811 ret = read(req->fd, ((char*)buf)+n, count-n); in safe_read()
813 ret = recv(req->fd, ((char*)buf)+n, count-n, 0); in safe_read()
819 ret = read(req->fd, ((char*)buf)+n, count-n); in safe_read()
850 static int fcgi_get_params(fcgi_request *req, unsigned char *p, unsigned char *end) in fcgi_get_params() argument
876 …fcgi_hash_set(&req->env, FCGI_HASH_FUNC(p, name_len), (char*)p, name_len, (char*)p + name_len, val… in fcgi_get_params()
882 static int fcgi_read_request(fcgi_request *req) in fcgi_read_request() argument
888 req->keep = 0; in fcgi_read_request()
889 req->closed = 0; in fcgi_read_request()
890 req->in_len = 0; in fcgi_read_request()
891 req->out_hdr = NULL; in fcgi_read_request()
892 req->out_pos = req->out_buf; in fcgi_read_request()
893 req->has_env = 1; in fcgi_read_request()
895 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
904 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
917 req->id = (hdr.requestIdB1 << 8) + hdr.requestIdB0; in fcgi_read_request()
920 if (safe_read(req, buf, len+padding) != len+padding) { in fcgi_read_request()
924 req->keep = (((fcgi_begin_request*)buf)->flags & FCGI_KEEP_CONN); in fcgi_read_request()
926 if (req->keep && req->tcp && !req->nodelay) { in fcgi_read_request()
933 setsockopt(req->fd, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on)); in fcgi_read_request()
934 req->nodelay = 1; in fcgi_read_request()
939 …fcgi_hash_set(&req->env, FCGI_HASH_FUNC("FCGI_ROLE", sizeof("FCGI_ROLE")-1), "FCGI_ROLE", sizeof("… in fcgi_read_request()
942 …fcgi_hash_set(&req->env, FCGI_HASH_FUNC("FCGI_ROLE", sizeof("FCGI_ROLE")-1), "FCGI_ROLE", sizeof("… in fcgi_read_request()
945 …fcgi_hash_set(&req->env, FCGI_HASH_FUNC("FCGI_ROLE", sizeof("FCGI_ROLE")-1), "FCGI_ROLE", sizeof("… in fcgi_read_request()
951 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
964 if (safe_read(req, buf, len+padding) != len+padding) { in fcgi_read_request()
965 req->keep = 0; in fcgi_read_request()
969 if (!fcgi_get_params(req, buf, buf+len)) { in fcgi_read_request()
970 req->keep = 0; in fcgi_read_request()
974 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read_request()
976 req->keep = 0; in fcgi_read_request()
988 if (safe_read(req, buf, len+padding) != len+padding) { in fcgi_read_request()
989 req->keep = 0; in fcgi_read_request()
993 if (!fcgi_get_params(req, buf, buf+len)) { in fcgi_read_request()
994 req->keep = 0; in fcgi_read_request()
998 q = req->env.list; in fcgi_read_request()
1032 if (safe_write(req, buf, sizeof(fcgi_header)+len) != (int)sizeof(fcgi_header)+len) { in fcgi_read_request()
1033 req->keep = 0; in fcgi_read_request()
1044 int fcgi_read(fcgi_request *req, char *str, int len) in fcgi_read() argument
1053 if (req->in_len == 0) { in fcgi_read()
1054 if (safe_read(req, &hdr, sizeof(fcgi_header)) != sizeof(fcgi_header) || in fcgi_read()
1057 req->keep = 0; in fcgi_read()
1060 req->in_len = (hdr.contentLengthB1 << 8) | hdr.contentLengthB0; in fcgi_read()
1061 req->in_pad = hdr.paddingLength; in fcgi_read()
1062 if (req->in_len == 0) { in fcgi_read()
1067 if (req->in_len >= rest) { in fcgi_read()
1068 ret = safe_read(req, str, rest); in fcgi_read()
1070 ret = safe_read(req, str, req->in_len); in fcgi_read()
1073 req->keep = 0; in fcgi_read()
1076 req->in_len -= ret; in fcgi_read()
1080 if (req->in_len == 0) { in fcgi_read()
1081 if (req->in_pad) { in fcgi_read()
1082 if (safe_read(req, buf, req->in_pad) != req->in_pad) { in fcgi_read()
1083 req->keep = 0; in fcgi_read()
1097 static inline void fcgi_close(fcgi_request *req, int force, int destroy) in fcgi_close() argument
1099 if (destroy && req->has_env) { in fcgi_close()
1100 fcgi_hash_clean(&req->env); in fcgi_close()
1101 req->has_env = 0; in fcgi_close()
1105 if (is_impersonate && !req->tcp) { in fcgi_close()
1110 if ((force || !req->keep) && req->fd >= 0) { in fcgi_close()
1112 if (!req->tcp) { in fcgi_close()
1113 HANDLE pipe = (HANDLE)_get_osfhandle(req->fd); in fcgi_close()
1123 shutdown(req->fd, 1); in fcgi_close()
1125 recv(req->fd, (char *)(&buf), sizeof(buf), 0); in fcgi_close()
1127 closesocket(req->fd); in fcgi_close()
1133 shutdown(req->fd, 1); in fcgi_close()
1135 recv(req->fd, (char *)(&buf), sizeof(buf), 0); in fcgi_close()
1137 close(req->fd); in fcgi_close()
1140 req->nodelay = 0; in fcgi_close()
1142 req->fd = -1; in fcgi_close()
1146 int fcgi_accept_request(fcgi_request *req) argument
1154 if (req->fd < 0) {
1160 if (!req->tcp) {
1161 pipe = (HANDLE)_get_osfhandle(req->listen_socket);
1162 FCGI_LOCK(req->listen_socket);
1170 FCGI_UNLOCK(req->listen_socket);
1178 req->fd = req->listen_socket;
1179 FCGI_UNLOCK(req->listen_socket);
1181 SOCKET listen_socket = (SOCKET)_get_osfhandle(req->listen_socket);
1184 int listen_socket = req->listen_socket;
1189 FCGI_LOCK(req->listen_socket);
1190 req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len);
1191 FCGI_UNLOCK(req->listen_socket);
1192 if (req->fd >= 0) {
1195 req->tcp = 1;
1210 closesocket(req->fd);
1211 req->fd = -1;
1217 req->tcp = 0;
1224 if (req->fd < 0 && (in_shutdown || errno != EINTR)) {
1226 if (req->fd < 0 && (in_shutdown || (errno != EINTR && errno != ECONNABORTED))) {
1234 if (req->fd >= 0) {
1239 fds.fd = req->fd;
1249 fcgi_close(req, 1, 0);
1251 if (req->fd < FD_SETSIZE) {
1257 FD_SET(req->fd, &set);
1260 ret = select(req->fd + 1, &set, NULL, NULL, &tv) >= 0;
1262 if (ret > 0 && FD_ISSET(req->fd, &set)) {
1265 fcgi_close(req, 1, 0);
1268 fcgi_close(req, 1, 0);
1277 if (fcgi_read_request(req)) {
1279 if (is_impersonate && !req->tcp) {
1280 pipe = (HANDLE)_get_osfhandle(req->fd);
1282 fcgi_close(req, 1, 1);
1287 return req->fd;
1289 fcgi_close(req, 1, 1);
1294 static inline fcgi_header* open_packet(fcgi_request *req, fcgi_request_type type) argument
1296 req->out_hdr = (fcgi_header*) req->out_pos;
1297 req->out_hdr->type = type;
1298 req->out_pos += sizeof(fcgi_header);
1299 return req->out_hdr;
1302 static inline void close_packet(fcgi_request *req) argument
1304 if (req->out_hdr) {
1305 int len = req->out_pos - ((unsigned char*)req->out_hdr + sizeof(fcgi_header));
1307req->out_pos += fcgi_make_header(req->out_hdr, (fcgi_request_type)req->out_hdr->type, req->id, len…
1308 req->out_hdr = NULL;
1312 int fcgi_flush(fcgi_request *req, int close) argument
1316 close_packet(req);
1318 len = req->out_pos - req->out_buf;
1321 fcgi_end_request_rec *rec = (fcgi_end_request_rec*)(req->out_pos);
1323 fcgi_make_header(&rec->hdr, FCGI_END_REQUEST, req->id, sizeof(fcgi_end_request));
1332 if (safe_write(req, req->out_buf, len) != len) {
1333 req->keep = 0;
1334 req->out_pos = req->out_buf;
1338 req->out_pos = req->out_buf;
1342 int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len) argument
1350 if (req->out_hdr && req->out_hdr->type != type) {
1351 close_packet(req);
1357 limit = sizeof(req->out_buf) - (req->out_pos - req->out_buf);
1359 if (!req->out_hdr) {
1361 if (!fcgi_flush(req, 0)) {
1365 open_packet(req, type);
1367 limit = sizeof(req->out_buf) - (req->out_pos - req->out_buf);
1369 memcpy(req->out_pos, str, rest);
1370 req->out_pos += rest;
1373 memcpy(req->out_pos, str, limit);
1374 req->out_pos += limit;
1377 if (!fcgi_flush(req, 0)) {
1384 limit = sizeof(req->out_buf) - (req->out_pos - req->out_buf);
1385 if (!req->out_hdr) {
1391 if (!req->out_hdr) {
1392 open_packet(req, type);
1394 memcpy(req->out_pos, str, len);
1395 req->out_pos += len;
1396 } else if (len - limit < sizeof(req->out_buf) - sizeof(fcgi_header)) {
1397 if (!req->out_hdr) {
1398 open_packet(req, type);
1401 memcpy(req->out_pos, str, limit);
1402 req->out_pos += limit;
1404 if (!fcgi_flush(req, 0)) {
1408 open_packet(req, type);
1409 memcpy(req->out_pos, str + limit, len - limit);
1410 req->out_pos += len - limit;
1416 close_packet(req);
1418 open_packet(req, type);
1419 fcgi_make_header(req->out_hdr, type, req->id, 0xfff8);
1420 req->out_hdr = NULL;
1421 if (!fcgi_flush(req, 0)) {
1424 if (safe_write(req, str + pos, 0xfff8) != 0xfff8) {
1425 req->keep = 0;
1434 open_packet(req, type);
1435 fcgi_make_header(req->out_hdr, type, req->id, (len - pos) - rest);
1436 req->out_hdr = NULL;
1437 if (!fcgi_flush(req, 0)) {
1440 if (safe_write(req, str + pos, (len - pos) - rest) != (len - pos) - rest) {
1441 req->keep = 0;
1445 open_packet(req, type);
1446 memcpy(req->out_pos, str + len - rest, rest);
1447 req->out_pos += rest;
1454 int fcgi_finish_request(fcgi_request *req, int force_close) argument
1458 if (req->fd >= 0) {
1459 if (!req->closed) {
1460 ret = fcgi_flush(req, 1);
1461 req->closed = 1;
1463 fcgi_close(req, force_close, 1);
1468 char* fcgi_getenv(fcgi_request *req, const char* var, int var_len) argument
1472 if (!req) return NULL;
1474 return fcgi_hash_get(&req->env, FCGI_HASH_FUNC(var, var_len), (char*)var, var_len, &val_len);
1477 char* fcgi_quick_getenv(fcgi_request *req, const char* var, int var_len, unsigned int hash_value) argument
1481 return fcgi_hash_get(&req->env, hash_value, (char*)var, var_len, &val_len);
1484 char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val) argument
1486 if (!req) return NULL;
1488 fcgi_hash_del(&req->env, FCGI_HASH_FUNC(var, var_len), var, var_len);
1491 return fcgi_hash_set(&req->env, FCGI_HASH_FUNC(var, var_len), var, var_len, val, strlen(val));
1495 char* fcgi_quick_putenv(fcgi_request *req, char* var, int var_len, unsigned int hash_value, char* v… argument
1498 fcgi_hash_del(&req->env, hash_value, var, var_len);
1501 return fcgi_hash_set(&req->env, hash_value, var, var_len, val, strlen(val));
1505 void fcgi_loadenv(fcgi_request *req, fcgi_apply_func func, zval *array TSRMLS_DC) argument
1507 fcgi_hash_apply(&req->env, func, array TSRMLS_CC);