FskErr KprDebugMachineNew(KprDebugMachine* it, KprDebug debug, FskSocket skt) { FskErr err = kFskErrNone; KprDebugMachine self = NULL; UInt32 ip; int port; BAIL_IF_ERR(err = FskMemPtrNewClear(sizeof(KprDebugMachineRecord), it)); self = *it; self->debug = debug; self->socket = skt; BAIL_IF_ERR(err = FskNetSocketGetRemoteAddress(skt, &ip, &port)); FskNetIPandPortToString(ip, port, self->address); FskListAppend(&self->debug->machine, self); FskNetSocketReceiveBufferSetSize(self->socket, kSocketBufferSize); FskThreadAddDataHandler(&self->reader, (FskThreadDataSource)self->socket, KprDebugMachineDataReader, true, false, self); bailIfError(KprSocketWriterNew(&self->writer, self->socket, self)); self->writer->errorCallback = KprDebugMachineWriteError; KprDebugMachineCallbackText(self, "onMachineRegistered", mxNoCommand, NULL); FskInstrumentedItemNew(self, NULL, &KprDebugMachineInstrumentation); return err; bail: KprDebugMachineDispose(self); return err; }
static FskErr KprWebSocketServerRequestNew(KprWebSocketServerRequest *it, KprWebSocketServer server, FskSocket skt) { FskErr err = kFskErrNone; KprWebSocketServerRequest request = NULL; bailIfError(FskMemPtrNewClear(sizeof(KprWebSocketServerRequestRecord), &request)); request->server = server; request->skt = skt; skt = NULL; FskNetSocketGetRemoteAddress(request->skt, (UInt32 *)&request->requesterAddress, &request->requesterPort); FskNetSocketMakeNonblocking(request->skt); bailIfError(FskHeaderStructNew(&request->requestHeaders)); bailIfError(FskHeaderStructNew(&request->responseHeaders)); request->out.size = 512; bailIfError(FskMemPtrNew(request->out.size, &request->out.buffer)); FskThreadAddDataHandler(&request->dataHandler, (FskThreadDataSource)request->skt, (FskThreadDataReadyCallback)KprWebSocketServerRequestDoRead, true, false, request); // request->state = kHTTPNewSession; *it = request; bail: if (err) { KprWebSocketServerRequestDispose(request); FskNetSocketClose(skt); } return err; }
int KprSocketGetRemotePort(KprSocket self) { FskErr err; int port; if (self->socket == NULL) return 0; err = FskNetSocketGetRemoteAddress(self->socket, NULL, &port); if (err != kFskErrNone) return 0L; return port; }
UInt32 KprSocketGetRemoteAddress(KprSocket self) { FskErr err; UInt32 ipaddr; if (self->socket == NULL) return 0; err = FskNetSocketGetRemoteAddress(self->socket, &ipaddr, NULL); if (err != kFskErrNone) return 0L; return ipaddr; }
static FskErr httpServerListenerStart(FskHTTPServerListener listener, FskSocket skt) { FskErr err = kFskErrNone; FskHTTPServerRequest request; if (listener->http->stopped) { FskInstrumentedItemSendMessage(listener->http, kFskHTTPInstrMsgConnectionRefusedStopped, listener); listener->http->stats.connectionsRefused++; FskNetSocketClose(skt); goto bail; } err = FskMemPtrNewClear(sizeof(FskHTTPServerRequestRecord), (FskMemPtr*)&request); BAIL_IF_ERR(err); sFskHTTPServerRequestUpUse(request); request->http = listener->http; request->skt = skt; FskNetSocketGetRemoteAddress(skt, (UInt32 *)&request->requesterAddress, &request->requesterPort); FskNetSocketMakeNonblocking(request->skt); err = FskHeaderStructNew(&request->requestHeaders); BAIL_IF_ERR(err); err = FskHeaderStructNew(&request->responseHeaders); BAIL_IF_ERR(err); request->in.bufferSize = request->http->defaultBufferSize; request->out.bufferSize = request->http->defaultBufferSize; err = FskMemPtrNew(request->in.bufferSize, (FskMemPtr*)&request->in.buf); BAIL_IF_ERR(err); err = FskMemPtrNew(request->out.bufferSize, (FskMemPtr*)&request->out.buf); BAIL_IF_ERR(err); FskListAppend((FskList*)&request->http->activeRequests, request); FskTimeCallbackNew(&request->cycleCallback); FskTimeCallbackNew(&request->keepAliveKillCallback); listener->http->stats.connectionsMade++; request->state = kHTTPNewSession; FskInstrumentedItemNew(request, NULL, &gFskHTTPServerRequestTypeInstrumentation); FskInstrumentedItemSetOwner(request, request->http); FskTimeCallbackScheduleNextRun(request->cycleCallback, httpServerTimeCycle, request); doCallCondition(request->http->callbacks->requestCondition, request, kFskHTTPConditionConnectionInitialized, request->refCon); FskTimeCallbackNew(&request->timer); FskTimeCallbackScheduleFuture(request->timer, 1, 0, KprHTTPServerTimerCallback, request); bail: if (err) FskHTTPServerRequestDispose(request); return err; }