int freerds_icp_LogoffUser(FDSAPI_MSG_PACKET* msg, pbRPCPayload** pbresponse) { rdsConnection* connection = NULL; FDSAPI_LOGOFF_USER_REQUEST* pRequest; FDSAPI_LOGOFF_USER_RESPONSE response; UINT32 type = FDSAPI_LOGOFF_USER_REQUEST_ID; pRequest = (FDSAPI_LOGOFF_USER_REQUEST*) calloc(1, sizeof(FDSAPI_LOGOFF_USER_REQUEST)); if (!pRequest) return -1; freerds_rpc_msg_unpack(FDSAPI_REQUEST_ID(type), pRequest, msg->buffer, msg->length); CopyMemory(pRequest, msg, sizeof(FDSAPI_MSG_HEADER)); response.msgType = FDSAPI_RESPONSE_ID(type); response.callId = pRequest->callId; connection = freerds_server_get_connection(g_Server, pRequest->ConnectionId); if (!connection) { response.status = 1; return -1; } MessageQueue_Post(connection->notifications, (void*) connection, pRequest->msgType, (void*) pRequest, NULL); *pbresponse = NULL; return PBRPC_SUCCESS; }
int CallInPing::decodeRequest() { BYTE* buffer; UINT32 length; buffer = (BYTE*) mEncodedRequest.data(); length = (UINT32) mEncodedRequest.size(); freerds_rpc_msg_unpack(m_RequestId, &m_Request, buffer, length); freerds_rpc_msg_free(m_RequestId, &m_Request); WLog_Print(logger_CallInPing, WLOG_DEBUG, "request: heartbeatId=%lu", m_Request.HeartbeatId); return 0; };
int CallInLogOffUserSession::decodeRequest() { BYTE* buffer; UINT32 length; buffer = (BYTE*) mEncodedRequest.data(); length = (UINT32) mEncodedRequest.size(); freerds_rpc_msg_unpack(m_RequestId, &m_Request, buffer, length); mConnectionId = m_Request.ConnectionId; freerds_rpc_msg_free(m_RequestId, &m_Request); WLog_Print(logger_CallInLogOffUserSession, WLOG_DEBUG, "request: connectionId=%lu", mConnectionId); return 0; };
int freerds_icp_Heartbeat(FDSAPI_MSG_PACKET* msg, pbRPCPayload** pbresponse) { pbRPCPayload* payload; FDSAPI_HEARTBEAT_REQUEST request; FDSAPI_HEARTBEAT_RESPONSE response; UINT32 type = FDSAPI_HEARTBEAT_REQUEST_ID; freerds_rpc_msg_unpack(FDSAPI_REQUEST_ID(type), &request, msg->buffer, msg->length); CopyMemory(&request, msg, sizeof(FDSAPI_MSG_HEADER)); response.msgType = FDSAPI_RESPONSE_ID(type); response.callId = request.callId; response.HeartbeatId = request.HeartbeatId; payload = pbrpc_payload_new(); payload->s = freerds_rpc_msg_pack(FDSAPI_RESPONSE_ID(type), &response, NULL); payload->buffer = Stream_Buffer(payload->s); payload->length = Stream_Length(payload->s); *pbresponse = payload; return PBRPC_SUCCESS; }
int CallInAuthenticateUser::decodeRequest() { BYTE* buffer; UINT32 length; buffer = (BYTE*) mEncodedRequest.data(); length = (UINT32) mEncodedRequest.size(); freerds_rpc_msg_unpack(m_RequestId, &m_Request, buffer, length); mSessionId = m_Request.SessionId; mUserName = m_Request.User ? m_Request.User : ""; mDomainName = m_Request.Domain ? m_Request.Domain : ""; mPassword = m_Request.Password ? m_Request.Password : ""; freerds_rpc_msg_free(m_RequestId, &m_Request); WLog_Print(logger_CallInAuthenticateUser, WLOG_DEBUG, "request: sessionId=%lu, userName=%s, domainName=%s", mSessionId, mUserName.c_str(), mDomainName.c_str()); return 0; };
int freerds_icp_ChannelEndpointOpen(FDSAPI_MSG_PACKET* msg, pbRPCPayload** pbresponse) { rdsConnection* connection = NULL; FDSAPI_CHANNEL_ENDPOINT_OPEN_REQUEST* pRequest; UINT32 type = FDSAPI_CHANNEL_ENDPOINT_OPEN_REQUEST_ID; pRequest = (FDSAPI_CHANNEL_ENDPOINT_OPEN_REQUEST*) calloc(1, sizeof(FDSAPI_CHANNEL_ENDPOINT_OPEN_REQUEST)); if (!pRequest) return -1; freerds_rpc_msg_unpack(FDSAPI_REQUEST_ID(type), pRequest, msg->buffer, msg->length); CopyMemory(pRequest, msg, sizeof(FDSAPI_MSG_HEADER)); connection = freerds_server_get_connection(g_Server, pRequest->ConnectionId); if (!connection) return -1; MessageQueue_Post(connection->notifications, (void*) connection, pRequest->msgType, (void*) pRequest, NULL); *pbresponse = NULL; return 0; }
int freerds_icp_LogonUser(FDSAPI_LOGON_USER_REQUEST* pRequest, FDSAPI_LOGON_USER_RESPONSE* pResponse) { int status; pbRPCPayload pbrequest; pbRPCPayload* pbresponse = NULL; UINT32 type = FDSAPI_LOGON_USER_REQUEST_ID; pbrequest.s = freerds_rpc_msg_pack(type, pRequest, NULL); pbrequest.buffer = Stream_Buffer(pbrequest.s); pbrequest.length = Stream_Length(pbrequest.s); status = pbrpc_call_method(g_Server, FDSAPI_REQUEST_ID(type), &pbrequest, &pbresponse); Stream_Free(pbrequest.s, TRUE); if (status != 0) return status; freerds_rpc_msg_unpack(FDSAPI_RESPONSE_ID(type), pResponse, pbresponse->buffer, pbresponse->length); pbrpc_free_payload(pbresponse); return PBRPC_SUCCESS; }