/*ARGSUSED*/ void douniverse(Char **v, struct command *c) { Char *cp = v[1]; Char *cp2; /* dunno how many elements v comes in with */ char ubuf[100]; if (cp == 0) { (void) getuniverse(ubuf); xprintf("%s\n", ubuf); } else { cp2 = v[2]; if (cp2 == 0) { if (*cp == '\0' || setuniverse(short2str(cp)) != 0) stderror(ERR_NAME | ERR_STRING, CGETS(23, 12, "Illegal universe")); } else { (void) getuniverse(ubuf); if (*cp == '\0' || setuniverse(short2str(cp)) != 0) stderror(ERR_NAME | ERR_STRING, CGETS(23, 12, "Illegal universe")); cleanup_push(ubuf, setuniverse_cleanup); if (setintr) { pintr_disabled++; cleanup_push(&pintr_disabled, disabled_cleanup); } lshift(v, 2); if (setintr) cleanup_until(&pintr_disabled); reexecute(c); cleanup_until(ubuf); } } }
/*ARGSUSED*/ void doucb(Char **v, struct command *c) { Char *cp = v[1]; char ubuf[100]; if (cp == 0) (void) setuniverse("ucb"); else { (void) getuniverse(ubuf); (void) setuniverse("ucb"); cleanup_push(ubuf, setuniverse_cleanup); if (setintr) { pintr_disabled++; cleanup_push(&pintr_disabled, disabled_cleanup); } lshift(v, 1); if (setintr) cleanup_until(&pintr_disabled); reexecute(c); cleanup_until(ubuf); } }
const ReplyHeader& ClientImpl::execute(const Request& request, std::size_t timeout, std::size_t connectTimeout) { log_trace("execute request " << request.url()); if (connectTimeout == Selectable::WaitInfinite) connectTimeout = timeout; _replyHeader.clear(); _socket.setTimeout(connectTimeout); bool shouldReconnect = _socket.isConnected(); if (!shouldReconnect) { log_debug("connect"); _socket.connect(_addrInfo); } _socket.setTimeout(timeout); log_debug("send request"); sendRequest(request); _stream.flush(); if (!_stream && shouldReconnect) { // sending failed and we were not connected before, so try again reexecute(request); shouldReconnect = false; } if (!_stream) throw IOError("error sending HTTP request"); log_debug("read reply"); _parser.reset(true); _readHeader = true; doparse(); if (_parser.begin() && shouldReconnect) { // reading failed and we were not connected before, so try again reexecute(request); if (!_stream) throw IOError("error sending HTTP request"); doparse(); } log_debug("reply ready"); if (_stream.fail()) throw IOError("failed to read HTTP reply"); if (_parser.fail()) throw IOError("invalid HTTP reply"); if (!_parser.end()) throw IOError("incomplete HTTP reply header"); return _replyHeader; }