static void print_timer(u8_t io, task_timer *t, const char *prefix, time now) { if (t) { ioprint(io, "%s %s start:%08x (%+08x) recurrent:%08x next:%08x [%s]\n", prefix, t->alive ? "ALIVE": "DEAD ", (u32_t)t->start_time, (u32_t)(t->start_time - now), (u32_t)(t->recurrent_time), (u32_t)(t->_next), t->name); print_task(io, t->task, prefix); } else { ioprint(io, "%s NONE\n", prefix); } }
void TASK_dump_pool(u8_t io) { int i, j; for (i = 0; i <= (CONFIG_TASK_POOL-1)/32; i++) { if (task_pool.mask[i]) { for (j = 0; j < 32; j++) { int ix = i*32+j; ioprint(io, "TASK %i @ %08x\n", ix, &task_pool.task[ix]); print_task(io, &task_pool.task[ix], ""); } } } }
static void print_task(u8_t io, task *t, const char *prefix) { if (t) { ioprint(io, "%s ix:%02x f:%08x FLAGS:%s%s%s%s%s%s arg:%08x argp:%08x\n" "%s next:%08x run_reqs:%i\n" , prefix, t->_ix, t->f, t->flags & TASK_EXE ? " E" : "/e", t->flags & TASK_RUN ? " R" : "/r", t->flags & TASK_WAIT ? " W" : "/w", t->flags & TASK_KILLED ? " K" : "/k", t->flags & TASK_LOOP ? " L" : "/l", t->flags & TASK_STATIC ? " S" : "/s", t->arg, t->arg_p, prefix, t->_next, t->run_requests); } else { ioprint(io, "%s NONE\n", prefix); } }
void TASK_dump(u8_t io) { ioprint(io, "TASK SYSTEM\n-----------\n"); print_task(io, task_sys.current, " current"); char lst[sizeof(TASK_DUMP_OUTPUT)]; memcpy(lst, TASK_DUMP_OUTPUT, sizeof(TASK_DUMP_OUTPUT)); char* p = (char*)strchr(lst, '_'); task* ct = (task *)task_sys.head; int ix = 1; while (ct) { sprint(p, "%02i", ix++); print_task(io, ct, lst); ct = ct->_next; } print_task(io, (task *)task_sys.last, " last "); ioprint(io, " pool bitmap "); for (ix = 0; ix < sizeof(task_pool.mask)/sizeof(task_pool.mask[0]); ix++) { ioprint(io, "%032b ", task_pool.mask[ix]); } ioprint(io, "\n"); for (ix = 0; ix < sizeof(task_pool.mask)/sizeof(task_pool.mask[0]); ix++) { int bit; for (bit = 0; bit < 32; bit++) { if ((task_pool.mask[ix] & (1<<bit)) == 0) { print_task(io, &task_pool.task[ix*32 + bit], " "); } } } ioprint(io, "\n"); ioprint(io, " timers\n"); char lst2[sizeof(TASK_TIM_DUMP_OUTPUT)]; memcpy(lst2, TASK_TIM_DUMP_OUTPUT, sizeof(TASK_TIM_DUMP_OUTPUT)); p = (char*)strchr(lst2, '_'); task_timer* tt = task_sys.first_timer; ix = 1; time now = SYS_get_time_ms(); while (tt) { sprint(p, "%02i", ix++); print_timer(io, tt, lst2, now); tt = tt->_next; } }
int httpopen(Client *c, Url *url) { int fd, code, redirect, authenticate; char *cookies; Ioproc *io; HttpState *hs; char *service; if(httpdebug) fprint(2, "httpopen\n"); io = c->io; hs = emalloc(sizeof(*hs)); hs->c = c; if(url->port) service = url->port; else service = url->scheme; hs->netaddr = estrdup(netmkaddr(url->host, 0, service)); c->aux = hs; if(httpdebug){ fprint(2, "dial %s\n", hs->netaddr); fprint(2, "dial port: %s\n", url->port); } fd = iotlsdial(io, hs->netaddr, 0, 0, 0, url->ischeme==UShttps); if(fd < 0){ Error: if(httpdebug) fprint(2, "iodial: %r\n"); free(hs->location); free(hs->setcookie); free(hs->netaddr); free(hs->credentials); if(fd >= 0) ioclose(io, hs->fd); hs->fd = -1; free(hs); c->aux = nil; return -1; } hs->fd = fd; if(httpdebug) fprint(2, "<- %s %s HTTP/1.0\n<- Host: %s\n", c->havepostbody? "POST": "GET", url->http.page_spec, url->host); ioprint(io, fd, "%s %s HTTP/1.0\r\nHost: %s\r\n", c->havepostbody? "POST" : "GET", url->http.page_spec, url->host); if(httpdebug) fprint(2, "<- User-Agent: %s\n", c->ctl.useragent); if(c->ctl.useragent) ioprint(io, fd, "User-Agent: %s\r\n", c->ctl.useragent); if(c->ctl.sendcookies){ /* should we use url->page here? sometimes it is nil. */ cookies = httpcookies(url->host, url->http.page_spec, url->ischeme == UShttps); if(cookies && cookies[0]) ioprint(io, fd, "%s", cookies); if(httpdebug) fprint(2, "<- %s", cookies); free(cookies); } if(c->havepostbody){ ioprint(io, fd, "Content-type: %s\r\n", PostContentType); ioprint(io, fd, "Content-length: %ud\r\n", c->npostbody); if(httpdebug){ fprint(2, "<- Content-type: %s\n", PostContentType); fprint(2, "<- Content-length: %ud\n", c->npostbody); } } if(c->authenticate){ ioprint(io, fd, "Authorization: %s\r\n", c->authenticate); if(httpdebug) fprint(2, "<- Authorization: %s\n", c->authenticate); } ioprint(io, fd, "\r\n"); if(c->havepostbody) if(iowrite(io, fd, c->postbody, c->npostbody) != c->npostbody) goto Error; redirect = 0; authenticate = 0; initibuf(&hs->b, io, fd); code = httprcode(hs); switch(code){ case -1: /* connection timed out */ goto Error; /* case Eof: werrstr("EOF from HTTP server"); goto Error; */ case 200: /* OK */ case 201: /* Created */ case 202: /* Accepted */ case 204: /* No Content */ case 205: /* Reset Content */ #ifdef NOT_DEFINED if(ofile == nil && r->start != 0) sysfatal("page changed underfoot"); #endif break; case 206: /* Partial Content */ werrstr("Partial Content (206)"); goto Error; case 301: /* Moved Permanently */ case 302: /* Moved Temporarily */ case 303: /* See Other */ case 307: /* Temporary Redirect */ redirect = 1; break; case 304: /* Not Modified */ break; case 400: /* Bad Request */ werrstr("Bad Request (400)"); goto Error; case 401: /* Unauthorized */ if(c->authenticate){ werrstr("Authentication failed (401)"); goto Error; } authenticate = 1; break; case 402: /* Payment Required */ werrstr("Payment Required (402)"); goto Error; case 403: /* Forbidden */ werrstr("Forbidden by server (403)"); goto Error; case 404: /* Not Found */ werrstr("Not found on server (404)"); goto Error; case 405: /* Method Not Allowed */ werrstr("Method not allowed (405)"); goto Error; case 406: /* Not Acceptable */ werrstr("Not Acceptable (406)"); goto Error; case 407: /* Proxy auth */ werrstr("Proxy authentication required (407)"); goto Error; case 408: /* Request Timeout */ werrstr("Request Timeout (408)"); goto Error; case 409: /* Conflict */ werrstr("Conflict (409)"); goto Error; case 410: /* Gone */ werrstr("Gone (410)"); goto Error; case 411: /* Length Required */ werrstr("Length Required (411)"); goto Error; case 412: /* Precondition Failed */ werrstr("Precondition Failed (412)"); goto Error; case 413: /* Request Entity Too Large */ werrstr("Request Entity Too Large (413)"); goto Error; case 414: /* Request-URI Too Long */ werrstr("Request-URI Too Long (414)"); goto Error; case 415: /* Unsupported Media Type */ werrstr("Unsupported Media Type (415)"); goto Error; case 416: /* Requested Range Not Satisfiable */ werrstr("Requested Range Not Satisfiable (416)"); goto Error; case 417: /* Expectation Failed */ werrstr("Expectation Failed (417)"); goto Error; case 500: /* Internal server error */ werrstr("Server choked (500)"); goto Error; case 501: /* Not implemented */ werrstr("Server can't do it (501)"); goto Error; case 502: /* Bad gateway */ werrstr("Bad gateway (502)"); goto Error; case 503: /* Service unavailable */ werrstr("Service unavailable (503)"); goto Error; default: /* Bogus: we should treat unknown code XYZ as code X00 */ werrstr("Unknown response code %d", code); goto Error; } if(httpheaders(hs) < 0) goto Error; if(c->ctl.acceptcookies && hs->setcookie) httpsetcookie(hs->setcookie, url->host, url->path); if(authenticate){ if(!hs->credentials){ if(hs->autherror[0]) werrstr("%s", hs->autherror); else werrstr("unauthorized; no www-authenticate: header"); goto Error; } c->authenticate = hs->credentials; hs->credentials = nil; }else if(c->authenticate) c->authenticate = 0; if(redirect){ if(!hs->location){ werrstr("redirection without Location: header"); goto Error; } c->redirect = hs->location; hs->location = nil; } return 0; }