static EjsVar *getResponseVar(void *handle, int field) { Ejs *ejs; MaConn *conn; MaResponse *resp; conn = handle; resp = conn->response; ejs = ((EjsWeb*) maGetHandlerQueueData(conn))->ejs; switch (field) { case ES_ejs_web_Response_code: return (EjsVar*) ejsCreateNumber(ejs, resp->code); case ES_ejs_web_Response_filename: return (EjsVar*) createString(ejs, resp->filename); case ES_ejs_web_Response_headers: return (EjsVar*) createHeaders(ejs, conn->response->headers); case ES_ejs_web_Response_mimeType: return (EjsVar*) createString(ejs, resp->mimeType); default: ejsThrowOutOfBoundsError(ejs, "Bad property slot reference"); return 0; } }
int main(int , char **) { createHeaders("compressed_matrix"); createHeaders("coordinate_matrix"); createHeaders("ell_matrix"); createHeaders("hyb_matrix"); createHeaders("matrix_row"); createHeaders("matrix_row_element"); createHeaders("matrix_col"); createHeaders("matrix_col_element"); createHeaders("matrix_prod_row_row_row"); createHeaders("matrix_prod_row_row_col"); createHeaders("matrix_prod_row_col_row"); createHeaders("matrix_prod_row_col_col"); createHeaders("matrix_prod_col_row_row"); createHeaders("matrix_prod_col_row_col"); createHeaders("matrix_prod_col_col_row"); createHeaders("matrix_prod_col_col_col"); createHeaders("matrix_solve_col_col"); createHeaders("matrix_solve_col_row"); createHeaders("matrix_solve_row_col"); createHeaders("matrix_solve_row_row"); createHeaders("scalar"); createHeaders("fft"); createHeaders("rand"); createHeaders("svd"); createHeaders("spai"); createHeaders("nmf"); createHeaders("ilu"); }
static EjsVar *getRequestVar(void *handle, int field) { Ejs *ejs; EjsWeb *web; MaConn *conn; MaRequest *req; conn = handle; req = conn->request; ejs = ((EjsWeb*) maGetHandlerQueueData(conn))->ejs; switch (field) { case ES_ejs_web_Request_accept: return createString(ejs, req->accept); case ES_ejs_web_Request_acceptCharset: return createString(ejs, req->acceptCharset); case ES_ejs_web_Request_acceptEncoding: return createString(ejs, req->acceptEncoding); case ES_ejs_web_Request_authAcl: case ES_ejs_web_Request_authGroup: case ES_ejs_web_Request_authUser: // TODO return (EjsVar*) ejs->undefinedValue; case ES_ejs_web_Request_authType: return createString(ejs, req->authType); case ES_ejs_web_Request_connection: return createString(ejs, req->connection); case ES_ejs_web_Request_contentLength: return (EjsVar*) ejsCreateNumber(ejs, req->length); case ES_ejs_web_Request_cookies: if (req->cookie) { return (EjsVar*) ejsCreateCookies(ejs); } else { return ejs->nullValue; } break; case ES_ejs_web_Request_extension: return createString(ejs, req->parsedUri->ext); case ES_ejs_web_Request_files: return (EjsVar*) ejs->undefinedValue; case ES_ejs_web_Request_headers: return (EjsVar*) createHeaders(ejs, conn->request->headers); case ES_ejs_web_Request_hostName: return createString(ejs, req->hostName); case ES_ejs_web_Request_method: return createString(ejs, req->methodName); case ES_ejs_web_Request_mimeType: return createString(ejs, req->mimeType); case ES_ejs_web_Request_pathInfo: return createString(ejs, req->pathInfo); case ES_ejs_web_Request_pathTranslated: return createString(ejs, req->pathTranslated); case ES_ejs_web_Request_pragma: return createString(ejs, req->pragma); case ES_ejs_web_Request_query: return createString(ejs, req->parsedUri->query); case ES_ejs_web_Request_originalUri: return createString(ejs, req->parsedUri->originalUri); case ES_ejs_web_Request_referrer: return createString(ejs, req->referer); case ES_ejs_web_Request_remoteAddress: return createString(ejs, conn->remoteIpAddr); case ES_ejs_web_Request_remoteHost: #if BLD_FEATURE_REVERSE_DNS && BLD_UNIX_LIKE { /* * This feature has denial of service risks. Doing a reverse DNS will be slower, * and can potentially hang the web server. Use at your own risk!! Not supported for windows. */ struct addrinfo *result; char name[MPR_MAX_STRING]; int rc; if (getaddrinfo(remoteIpAddr, NULL, NULL, &result) == 0) { rc = getnameinfo(result->ai_addr, sizeof(struct sockaddr), name, sizeof(name), NULL, 0, NI_NAMEREQD); freeaddrinfo(result); if (rc == 0) { return createString(ejs, name); } } } #endif return createString(ejs, conn->remoteIpAddr); case ES_ejs_web_Request_sessionID: web = ejs->handle; return createString(ejs, web->session ? web->session->id : ""); case ES_ejs_web_Request_url: return createString(ejs, req->url); case ES_ejs_web_Request_userAgent: return createString(ejs, req->userAgent); } ejsThrowOutOfBoundsError(ejs, "Bad property slot reference"); return 0; }