Пример #1
0
/*
 *----------------------------------------------------------------------
 *
 * WriteCloseRecords --
 *
 *      Writes an EOF record for the stream content if necessary.
 *      If this is the last writer to close, writes an FCGI_END_REQUEST
 *      record.
 *
 *----------------------------------------------------------------------
 */
static void WriteCloseRecords(struct FCGX_Stream *stream)
{
	FCGX_Stream_Data *data = (FCGX_Stream_Data *) stream->data;
	/*
	 * Enter rawWrite mode so final records won't be encapsulated as
	 * stream data.
	 */
	data->rawWrite = TRUE;
	/*
	 * Generate EOF for stream content if needed.
	 */
	if (!(data->type == FCGI_STDERR
			&& stream->wrNext == data->buff
			&& !data->isAnythingWritten)) {
		FCGI_Header header;
		header = MakeHeader(data->type, data->reqDataPtr->requestId, 0,
			0);
		FCGX_PutStr((char *)&header, sizeof(header), stream);
	};
	/*
	 * Generate FCGI_END_REQUEST record if needed.
	 */
	if (data->reqDataPtr->nWriters == 1) {
		FCGI_EndRequestRecord endRequestRecord;
		endRequestRecord.header = MakeHeader(FCGI_END_REQUEST,
			data->reqDataPtr->requestId,
			sizeof(endRequestRecord.body), 0);
		endRequestRecord.body =
			MakeEndRequestBody(data->reqDataPtr->appStatus,
			FCGI_REQUEST_COMPLETE);
		FCGX_PutStr((char *)&endRequestRecord, sizeof(endRequestRecord),
			stream);
	}
	data->reqDataPtr->nWriters--;
}
Пример #2
0
void ProcessaCMD_HELLO( BYTE * buffer ){

  BYTE bufOut[8];
  BYTE bLog;
  DWORD dwSerNum;
  char i;

  if ( ModemGSM_IsReady() == FALSE ){
    //enviaNACK( buffer[ EO_FIELD ], DONT_CONNECTED  ); 
    return;    
  }
  
  bLog = EVT_SW_HELLO;
  Log( EVT_SW, &bLog, sizeof( BYTE ));  

  dwSerNum = GetSerialNumber();

  // altera o estado do SMS Box para conectado com o Host
  SetStatus( ST_COM_PC_OK );
  
#ifdef USE_SONDA
  // timer para controle de conexão do host
  serialPC_SondaTimer = GetTimer( SONDA_TIMEOUT );
#endif
  
  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_HELLO );

  for ( i = sizeof( DWORD ) ; i ; i-- )
  {
    bufOut[ CMD_FIELD + (sizeof(DWORD) - (i - 1)) ] = ((BYTE*)&dwSerNum)[(i - 1)];
  } 

  enviarPacotePC( bufOut, sizeof( bufOut ));
}
Пример #3
0
void ProcessaCMD_GET_DEV_ST( BYTE * buffer ){
  BYTE bufOut[6];
  BYTE bState;
  BYTE bRet;
  BYTE bDevID;
  BYTE bLog;

  if ( !IsConnected() ){
    return;
  }

  bLog = EVT_SW_DEV_ST;
  Log( EVT_SW, &bLog, sizeof( BYTE ));   

  bDevID = buffer[ CMD_FIELD + 1 ];
  bRet = Dev_GetStatus( bDevID , &bState );
  
  if ( bRet == NULL ){
    bState = DEV_SET_STATE_ERROR;    
  }

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_GET_DEV_ST );

  bufOut[ CMD_FIELD + 1 ] = bDevID;
  bufOut[ CMD_FIELD + 2 ] = bState;
  
  enviarPacotePC( bufOut, sizeof( bufOut )); 
}
Пример #4
0
void ProcessaCMD_VERSION( BYTE * buffer )
{
  BYTE bufOut[16];
  BYTE  bLog;
  DWORD* dwTmp[3];
  BYTE bTmp;
  char i;

  if ( !IsConnected() )
  {
    return;          
  }

  bLog = EVT_SW_VERSION;
  Log( EVT_SW, &bLog, sizeof( BYTE ));

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_VERSION );

  dwTmp[0] = GetBoardVersion();
  dwTmp[1] = GetFirmwareVersion();
  dwTmp[2] = GetBootLoaderVersion();

  for ( bLog = 0; bLog < GET_VEC_NUM_MEMBERS(dwTmp); bLog++ )
  {
    for ( i = sizeof( DWORD ) ; i ; i-- )
    {
      bTmp = CMD_FIELD + (bLog << 2) + (sizeof(DWORD) - (i - 1));
      bufOut[ bTmp ] = ((BYTE*)dwTmp[bLog])[(i - 1)];
    } 
  }

  enviarPacotePC( bufOut, sizeof( bufOut ));    
}
Пример #5
0
void ProcessaCMD_SET_DEV_ST( BYTE * buffer ){
  BYTE bufOut[6];
  BYTE bRet;
  BYTE bNewState;
  BYTE bDevID;

  if ( !IsConnected() ){
    return;
  }

  bDevID = EVT_SW_DEV_ST;
  Log( EVT_SW, &bDevID, sizeof( BYTE ));  

  bDevID    = buffer[ CMD_FIELD + 1 ];
  bNewState = buffer[ CMD_FIELD + 2 ];

  bRet = Dev_ChangeState( bDevID , bNewState );  
  if ( bRet != TRUE ){
    bNewState = DEV_SET_STATE_ERROR;    
  }

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_SET_DEV_ST );

  bufOut[ CMD_FIELD + 1 ] = bDevID;
  bufOut[ CMD_FIELD + 2 ] = bNewState;
  
  enviarPacotePC( bufOut, sizeof( bufOut )); 
}
Пример #6
0
void ProcessaCMD_BOOTLOADER_UPLOAD_FW( BYTE * buffer ){
  
  BYTE bufOut[5];
  BYTE bLen;

  if ( !IsConnected()){
    return;
  } 

  serialPC_ContPackages++;

  //enviaACK( buffer[EO_FIELD] );
  bLen = buffer[LEN_FIELD]-1; // retirado do comprimento o equivalente ao campo CMD

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_BOOTLOADER_UPLOAD_FW );
 
  if ( bLen > (BOOT_LOADER_FRAME_LEN + sizeof( DWORD )) ){
    bufOut[CMD_FIELD+1] = BOOT_LOADER_FLASH_FRAME_TOO_LONG;  
  }
  else{
    bufOut[CMD_FIELD+1] = UpLoad2Flash( (BYTE*)&buffer[CMD_FIELD+1], bLen );
    //bufOut[CMD_FIELD+1] = 1;
  }

  enviarPacotePC( bufOut, sizeof( bufOut ));

  serialPC_ContPackages--;
  return;
}
Пример #7
0
j_result_t CXSdk::SearchRecord(j_int32_t nUserID, const j_char_t *pResid, j_time_t begin, j_time_t end, RcdTimeList &timeList)
{
	if (m_usrMap[nUserID].is_active)
    {
        J_CtrlPacket *pCtrlData = (J_CtrlPacket *)new char[sizeof(J_CtrlHead) + sizeof(J_RecordData)];
        MakeHeader((char *)pCtrlData, m_usrMap[nUserID].id.usr_id, jo_rcd_search_req, jo_intact_pack, 0, sizeof(J_RecordData));
        J_RecordData *rcdCtrlData = (J_RecordData *)pCtrlData->data;
		memset(pCtrlData->data, 0, sizeof(J_RecordData));

        memcpy(rcdCtrlData->res_id, pResid, strlen(pResid));
        rcdCtrlData->begin_time = begin;
        rcdCtrlData->end_time = end;

        m_sockMap[nUserID]->Write(pCtrlData, sizeof(J_CtrlHead) + sizeof(J_RecordData));
        J_CtrlHead ctrl_head_resp = {0};
        m_sockMap[nUserID]->Read(&ctrl_head_resp, sizeof(J_CtrlHead));
        if (ctrl_head_resp.ret == 0)
        {
			//数据解析
			int nTotleLen = ctrl_head_resp.ex_length;
			RcdTimeInfo *pInfo = NULL;
			pInfo = (RcdTimeInfo *)new char[nTotleLen];
			m_sockMap[nUserID]->Read(pInfo, nTotleLen);
			while (nTotleLen > 0)
			{
				timeList.push_back(pInfo);
				++pInfo;
				nTotleLen -= sizeof(RcdTimeInfo);
			}
        }
    }
	return 0;
}
Пример #8
0
void enviaNACK( BYTE dest, BYTE errCode ){
  BYTE buffer[5];

  MakeHeader( buffer, sizeof( buffer ), dest, NACK );

  buffer[ CMD_FIELD+1 ] = errCode;

  enviarPacotePC( buffer, sizeof( buffer ));
}
Пример #9
0
int main (int argc,char **argv) {
 
 char dummy[256];
 char *tif_data;
 uint32 data_size;
 uint32 offset;
 uint16 dir_count;
 TIFFDirEntry tdir;
  
 _mkdir(OUTPUTDIR);
 memset(dummy, 0x41, sizeof(dummy));
 
 data_size = sizeof(TIFFHeader)+sizeof(dummy)+sizeof(uint16)+(2*NSIZE(ttags)+4)*sizeof(TIFFDirEntry);
 
 printf("\n*** TIF file format fuzzer ***\n");
  
 tif_data = (char*)malloc(data_size);
 if (!tif_data) {
  printf("error: cannot malloc\n");
  return -1;
 }
 
 memset(tif_data, 0x00, data_size);
 
 offset = sizeof(TIFFHeader);
 MakeHeader(tif_data, sizeof(TIFFHeader)+sizeof(dummy));
 memcpy(tif_data+offset, dummy, sizeof(dummy));
 offset += sizeof(dummy);
 
 dir_count = 3;
 memcpy(tif_data+offset, &dir_count, sizeof(uint16));
 offset += sizeof(uint16);
 
 tdir.tdir_tag = 0x100;
 tdir.tdir_type = TIFF_SHORT;
 tdir.tdir_count = 1;
 tdir.tdir_offset = 600;
 
 memcpy(tif_data+offset, &tdir, sizeof(TIFFDirEntry));
 offset += sizeof(TIFFDirEntry);
 
 tdir.tdir_tag = 0x101;
 tdir.tdir_type = TIFF_SHORT;
 tdir.tdir_count = 1;
 tdir.tdir_offset = 400;
 
 memcpy(tif_data+offset, &tdir, sizeof(TIFFDirEntry));
 offset += sizeof(TIFFDirEntry);
 
 DirFuzz(tif_data, data_size, offset);
 
 free(tif_data);
 
 getch();
 return 0;
}
//______________________________________________________________________________
void HtmlSummary::Build()
{
	// Build the summary.
	
	MakeHeader();
	for (int i=0;i<fNTables;i++) {
		GetTable(i)->Build();
		fHtml += GetTable(i)->Html();
	}
	MakeFooter();
}
Пример #11
0
void ProcessaCMD_BOOTLOADER_CHANGEFW( BYTE * buffer ){

  BYTE bufOut[5];

  if ( !IsConnected( ) ){
    return;
  }  

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_BOOTLOADER_CHANGEFW );

  bufOut[CMD_FIELD+1 ]  = StartChangeFirmware();    

  enviarPacotePC( bufOut, sizeof( bufOut ));
}
Пример #12
0
static void WebServerReadHandler(void)
{
    int count;
    assert(fromWS.next == fromWS.stop);
    assert(fromWS.next == &fromWS.buff[0]);
    count = read(STDIN_FILENO, fromWS.next + sizeof(FCGI_Header),
                 BUFFLEN - sizeof(FCGI_Header));
    if(count < 0) {
        exit(errno);
    }
    *((FCGI_Header *) &fromWS.buff[0])
            = MakeHeader(FCGI_STDIN, requestId, count, 0);
    fromWS.stop = &fromWS.buff[sizeof(FCGI_Header) + count];
    webServerReadHandlerEOF = (count == 0);
}
Пример #13
0
bool NewSendCGITask::Req2Buf(uint32_t _taskid, void* const _user_context, AutoBuffer& _outbuffer, AutoBuffer& _extend, int& _error_code, const int _channel_select)
{
	string reqProtobuf = MakeMsgReq();

	DWORD dwCompressed = 0;
	string body = nocompress_aes(pAuthInfo->m_Session, reqProtobuf);
	if (!body.size())	return FALSE;

	string header = MakeHeader(BaseHeader::s_cookie, m_nCgiType, reqProtobuf.size(), reqProtobuf.size());
	
	string req = header + body;

	_outbuffer.AllocWrite(req.size());
	_outbuffer.Write(req.c_str(), req.size());

	return TRUE;
}
Пример #14
0
/*
 *----------------------------------------------------------------------
 *
 * EmptyBuffProc --
 *
 *      Encapsulates any buffered stream content in a FastCGI
 *      record.  Writes the data, making the buffer empty.
 *
 *----------------------------------------------------------------------
 */
static void EmptyBuffProc(struct FCGX_Stream *stream, int doClose)
{
	FCGX_Stream_Data *data = (FCGX_Stream_Data *) stream->data;
	int cLen, eLen;
	/*
	 * If the buffer contains stream data, fill in the header.
	 * Pad the record to a multiple of 8 bytes in length.  Padding
	 * can't overflow the buffer because the buffer is a multiple
	 * of 8 bytes in length.  If the buffer contains no stream
	 * data, reclaim the space reserved for the header.
	 */
	if (!data->rawWrite) {
		cLen = stream->wrNext - data->buff - sizeof(FCGI_Header);
		if (cLen > 0) {
			eLen = AlignInt8(cLen);
			/*
			 * Giving the padding a well-defined value keeps Purify happy.
			 */
			memset(stream->wrNext, 0, eLen - cLen);
			stream->wrNext += eLen - cLen;
			*((FCGI_Header *) data->buff)
				= MakeHeader(data->type,
				data->reqDataPtr->requestId, cLen, eLen - cLen);
		} else {
			stream->wrNext = data->buff;
		}
	}
	if (doClose) {
		WriteCloseRecords(stream);
	};
	if (stream->wrNext != data->buff) {
		data->isAnythingWritten = TRUE;
		if (write_it_all(data->reqDataPtr->ipcFd, (char *)data->buff,
				stream->wrNext - data->buff) < 0) {
			SetError(stream, OS_Errno);
			return;
		}
		stream->wrNext = data->buff;
	}
	/*
	 * The buffer is empty.
	 */
	if (!data->rawWrite) {
		stream->wrNext += sizeof(FCGI_Header);
	}
}
Пример #15
0
int CXSdk::Login(const j_char_t *pAddr, j_int16_t nPort, const j_char_t *pUsername, const j_char_t *pPassword)
{
    //int nRet = sizeof(J_CtrlHead);
    J_CtrlPacket *pCtrlData = (J_CtrlPacket *)new j_char_t[sizeof(J_CtrlHead)+sizeof(J_LoginData)];
    MakeHeader((j_char_t *)pCtrlData, NULL, jo_login_req, jo_intact_pack, 0, sizeof(J_LoginData));
    J_LoginData *loginData = (J_LoginData *)pCtrlData->data;
    memset(pCtrlData->data, 0, sizeof(J_LoginData));
    memcpy(loginData->user_name, pUsername, strlen(pUsername));
    memcpy(loginData->pass_word, pPassword, strlen(pPassword));

    wxSocketClient *pSocket = new wxSocketClient();

    int sdkId = 0;
    wxIPV4address addr;
    addr.Hostname(wxString::FromUTF8(pAddr));
    addr.Service(nPort);
    if (pSocket->Connect(addr))
    {
        pSocket->Write(pCtrlData, sizeof(J_CtrlHead)+sizeof(J_LoginData));
        J_CtrlHead ctrl_head = {0};
        pSocket->Read(&ctrl_head, sizeof(J_CtrlHead));
        if (ctrl_head.ret == 0)
        {
            sdkId = GetIdleUser();
            if (sdkId > 0)
            {
                memcpy(m_usrMap[sdkId].ip_addr, pAddr, strlen(pAddr));
                m_usrMap[sdkId].port = nPort;
                m_usrMap[sdkId].is_active = true;
                memcpy(m_usrMap[sdkId].user_name, pUsername, strlen(pUsername));
                memcpy(m_usrMap[sdkId].pass_word, pPassword, strlen(pPassword));
                memcpy(m_usrMap[sdkId].id.usr_id, ctrl_head.user_id, sizeof(ctrl_head.user_id));
                m_sockMap[sdkId] = pSocket;
            }
        }
    }
    else
    {
        delete pSocket;
    }
    delete pCtrlData;

    return sdkId;
}
Пример #16
0
void ProcessaCMD_SONDA( BYTE * buffer ){
#ifdef USE_SONDA
  BYTE bufOut[4];
  BYTE bLog;

  if ( !IsConnected() ){
    return;          
  }
  
  bLog = EVT_SW_SONDA;
  Log( EVT_SW, &bLog, sizeof( BYTE ));

  RestartTimer( serialPC_SondaTimer, SONDA_TIMEOUT );

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_SONDA );

  enviarPacotePC( bufOut, sizeof( bufOut ));
#endif
}
Пример #17
0
void CXSdk::Logout(int nUserID)
{
    if (m_usrMap[nUserID].is_active)
    {
        J_CtrlHead ctrl_head_req = {0};
        MakeHeader((char *)&ctrl_head_req, m_usrMap[nUserID].id.usr_id, jo_logout_req, jo_intact_pack, 0, sizeof(J_LoginData));

        m_sockMap[nUserID]->Write(&ctrl_head_req, sizeof(J_CtrlHead));
        J_CtrlHead ctrl_head_resp = {0};
        m_sockMap[nUserID]->Read(&ctrl_head_resp, sizeof(J_CtrlHead));
        if (ctrl_head_resp.ret == 0)
        {
            memset(&m_usrMap[nUserID], 0, sizeof(J_UserInfo));
            m_sockMap[nUserID]->Close();
            delete m_sockMap[nUserID];
            m_sockMap.erase(nUserID);
            PutIdleUser(nUserID);
        }
    }
}
Пример #18
0
void ProcessaCMD_BOOTLOADER_GETCRC32( BYTE * buffer ){
  BYTE bufOut[8];
  DWORD crc32;

  if ( !IsConnected( ) ){
    return;
  }  

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_BOOTLOADER_GETCRC32 );

  crc32 = GetCalcCRC32();
  ResetCRC32( );

  bufOut[CMD_FIELD + 1] = HIBYTE( HIWORD( crc32 ) );
  bufOut[CMD_FIELD + 2] = LOBYTE( HIWORD( crc32 ) );
  bufOut[CMD_FIELD + 3] = HIBYTE( LOWORD( crc32 ) );
  bufOut[CMD_FIELD + 4] = LOBYTE( LOWORD( crc32 ) );

  enviarPacotePC( bufOut, sizeof( bufOut ));
}
Пример #19
0
void ProcessaCMD_ASC( BYTE * buffer  ){
  BYTE bRet;
  BYTE bufOut[5];
  BYTE bLog[2];

  if ( !IsConnected() ){
    return;          
  }
  
  bLog[0] = EVT_SW_ASC;
  bLog[1] = buffer[CMD_FIELD+1];
  Log( EVT_SW, bLog, 2 * sizeof( BYTE ));

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_ASC );

  bRet = ModemGSM_ChangeCard( buffer[CMD_FIELD+1]);
  bufOut[CMD_FIELD+1] = (bRet == TRUE)? 0 : 1;
  
  enviarPacotePC( bufOut, sizeof( bufOut ) );
}
Пример #20
0
void ProcessaCMD_STATUS( BYTE * buffer ){
  BYTE bufOut[6];
  WORD wStatus;
  BYTE bLog;

  if ( !IsConnected() ){
    return;          
  }

  bLog = EVT_SW_STATUS;
  Log( EVT_SW, &bLog, sizeof( BYTE ));

  wStatus = GetStatus();

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_STATUS );

  bufOut[ CMD_FIELD + 1 ] = HIBYTE( wStatus );
  bufOut[ CMD_FIELD + 2 ] = LOBYTE( wStatus );

  enviarPacotePC( bufOut, sizeof( bufOut ));
}
Пример #21
0
/*
 *----------------------------------------------------------------------
 *
 * ProcessBeginRecord --
 *
 *      Reads an FCGI_BEGIN_REQUEST record.
 *
 * Results:
 *      BEGIN_RECORD for normal return.  FCGX_PROTOCOL_ERROR for
 *      protocol error.  SKIP for attempt to multiplex
 *      connection.  -1 for error from write (errno in stream).
 *
 * Side effects:
 *      In case of BEGIN_RECORD return, stores requestId, role,
 *      keepConnection values, and sets isBeginProcessed = TRUE.
 *
 *----------------------------------------------------------------------
 */
static int ProcessBeginRecord(int requestId, FCGX_Stream * stream)
{
	FCGX_Stream_Data *data = (FCGX_Stream_Data *) stream->data;
	FCGI_BeginRequestBody body;
	if (requestId == 0 || data->contentLen != sizeof(body)) {
		return FCGX_PROTOCOL_ERROR;
	}
	if (data->reqDataPtr->isBeginProcessed) {
		/*
		 * The Web server is multiplexing the connection.  This library
		 * doesn't know how to handle multiplexing, so respond with
		 * FCGI_END_REQUEST{protocolStatus = FCGI_CANT_MPX_CONN}
		 */
		FCGI_EndRequestRecord endRequestRecord;
		endRequestRecord.header = MakeHeader(FCGI_END_REQUEST,
			requestId, sizeof(endRequestRecord.body), 0);
		endRequestRecord.body
			= MakeEndRequestBody(0, FCGI_CANT_MPX_CONN);
		if (write_it_all(data->reqDataPtr->ipcFd,
				(char *)&endRequestRecord,
				sizeof(endRequestRecord)) < 0) {
			SetError(stream, OS_Errno);
			return -1;
		}

		return SKIP;
	}
	/*
	 * Accept this new request.  Read the record body.
	 */
	data->reqDataPtr->requestId = requestId;
	if (FCGX_GetStr((char *)&body, sizeof(body), stream)
		!= sizeof(body)) {
		return FCGX_PROTOCOL_ERROR;
	}
	data->reqDataPtr->keepConnection = (body.flags & FCGI_KEEP_CONN);
	data->reqDataPtr->role = (body.roleB1 << 8) + body.roleB0;
	data->reqDataPtr->isBeginProcessed = TRUE;
	return BEGIN_RECORD;
}
Пример #22
0
int CXSdk::PtzControl(int nUserID, const char *pResid, int nCmd, int nParam)
{
    if (m_usrMap[nUserID].is_active)
    {
        J_CtrlPacket *pCtrlData = (J_CtrlPacket *)new char[sizeof(J_CtrlHead) + sizeof(J_PTZCtlData)];
        MakeHeader((char *)pCtrlData, m_usrMap[nUserID].id.usr_id, jo_ptz_control_req, jo_intact_pack, 0, sizeof(J_PTZCtlData));
        J_PTZCtlData *ptzCtrlData = (J_PTZCtlData *)pCtrlData->data;
        memset(pCtrlData->data, 0, sizeof(J_PTZCtlData));

        memcpy(ptzCtrlData->res_id, pResid, strlen(pResid));
        ptzCtrlData->command = nCmd;
        ptzCtrlData->param = nParam;

        m_sockMap[nUserID]->Write(pCtrlData, sizeof(J_CtrlHead) + sizeof(J_PTZCtlData));
        J_CtrlHead ctrl_head_resp = {0};
        m_sockMap[nUserID]->Read(&ctrl_head_resp, sizeof(J_CtrlHead));
        if (ctrl_head_resp.ret != 0)
        {
            //错误处理
        }
    }
    return 0;
}
Пример #23
0
char *CXSdk::GetResList(int nUserID)
{
    char *xml_data = NULL;
    J_CtrlHead getres_head_req = {0};
    MakeHeader((char *)&getres_head_req, m_usrMap[nUserID].id.usr_id, jo_list_res_req, jo_intact_pack, 0, sizeof(J_LoginData));

    m_sockMap[nUserID]->Write(&getres_head_req, sizeof(J_CtrlHead));
    J_CtrlHead getres_head_resp = {0};
    m_sockMap[nUserID]->Read(&getres_head_resp, sizeof(getres_head_resp));

    if (getres_head_resp.ret == 0)
    {
        if (getres_head_resp.flag == 0)
        {
            int nDataLen = ntohs(getres_head_resp.ex_length);
            xml_data = new char[nDataLen + 1];
            m_sockMap[nUserID]->Read(xml_data, nDataLen);
            xml_data[nDataLen] = '\0';
            return xml_data;
        }
    }
    return NULL;
}
Пример #24
0
/*
 *----------------------------------------------------------------------
 *
 * ProcessManagementRecord --
 *
 *      Reads and responds to a management record.  The only type of
 *      management record this library understands is FCGI_GET_VALUES.
 *      The only variables that this library's FCGI_GET_VALUES
 *      understands are FCGI_MAX_CONNS, FCGI_MAX_REQS, and FCGI_MPXS_CONNS.
 *      Ignore other FCGI_GET_VALUES variables; respond to other
 *      management records with a FCGI_UNKNOWN_TYPE record.
 *
 *----------------------------------------------------------------------
 */
static int ProcessManagementRecord(int type, FCGX_Stream * stream)
{
	FCGX_Stream_Data *data = (FCGX_Stream_Data *) stream->data;
	ParamsPtr paramsPtr = NewParams(3);
	char **pPtr;
	char response[64];	/* 64 = 8 + 3*(1+1+14+1)* + padding */
	char *responseP = &response[FCGI_HEADER_LEN];
	char *name, value = '\0';
	int len, paddedLen;
	if (type == FCGI_GET_VALUES) {
		ReadParams(paramsPtr, stream);
		if ((FCGX_GetError(stream) != 0) || (data->contentLen != 0)) {
			FreeParams(&paramsPtr);
			return FCGX_PROTOCOL_ERROR;
		}
		for (pPtr = paramsPtr->vec; pPtr < paramsPtr->cur; pPtr++) {
			name = *pPtr;
			*(strchr(name, '=')) = '\0';
			if (strcmp(name, FCGI_MAX_CONNS) == 0) {
				value = '1';
			} else if (strcmp(name, FCGI_MAX_REQS) == 0) {
				value = '1';
			} else if (strcmp(name, FCGI_MPXS_CONNS) == 0) {
				value = '0';
			} else {
				name = NULL;
			}
			if (name != NULL) {
#include <fmt.h>
				len = strlen(name);
				responseP[0] = (char)len;
				responseP[1] = (char)1;
				fmt_str(responseP + 2, name);
				responseP[2 + len] = value;
				responseP[3 + len] = '\0';
//                sprintf(responseP, "%c%c%s%c", len, 1, name, value);
				responseP += len + 3;
			}
		}
		len = responseP - &response[FCGI_HEADER_LEN];
		paddedLen = AlignInt8(len);
		*((FCGI_Header *) response)
			= MakeHeader(FCGI_GET_VALUES_RESULT,
			FCGI_NULL_REQUEST_ID, len, paddedLen - len);
		FreeParams(&paramsPtr);
	} else {
		paddedLen = len = sizeof(FCGI_UnknownTypeBody);
		((FCGI_UnknownTypeRecord *) response)->header
			= MakeHeader(FCGI_UNKNOWN_TYPE, FCGI_NULL_REQUEST_ID,
			len, 0);
		((FCGI_UnknownTypeRecord *) response)->body
			= MakeUnknownTypeBody(type);
	}
	if (write_it_all(data->reqDataPtr->ipcFd, response,
			FCGI_HEADER_LEN + paddedLen) < 0) {
		SetError(stream, OS_Errno);
		return -1;
	}

	return MGMT_RECORD;
}
Пример #25
0
/*
** int Compress(char ARG_PTR *pszSource, char ARG_PTR *pszDest,
**              BYTE byteAlgorithm, BYTE byteExtensionChar);
**
** Compress one file to another.
**
** Arguments:  pszSource         - name of file to compress
**             pszDest           - name of compressed output file
**             byteAlgorithm     - compression algorithm to use
**             byteExtensionChar - compressed file name extension character
**
** Returns:    int - TRUE if compression finished successfully.  One of the
**                   LZERROR_ codes if not.
**
** Globals:    none
*/
INT Compress(
   NOTIFYPROC pfnNotify,
   CHAR ARG_PTR *pszSource,
   CHAR ARG_PTR *pszDest,
   BYTE byteAlgorithm,
   BOOL bDoRename,
   PLZINFO pLZI)
{
   INT doshSource,            // input file handle
       doshDest,              // output file handle
       nRetVal = TRUE;
   FH FHOut;                  // compressed header info struct
   CHAR szDestFileName[MAX_PATH];
   BYTE byteExtensionChar;

   // Sanity check
   if (!pLZI) {
      return(LZERROR_GLOBLOCK);
   }

   // Set up input file handle. Set cblInSize to length of input file.
   if ((nRetVal = GetIOHandle(pszSource, READ_IT, & doshSource, &pLZI->cblInSize)) != TRUE)
      return(nRetVal);

   // Rewind input file.
   if (FSEEK(doshSource, 0L, SEEK_SET) != 0L)
   {
      FCLOSE(doshSource);
      return(LZERROR_BADINHANDLE);
   }

   // Create destination file name.

   STRCPY(szDestFileName, pszDest);

   if (bDoRename == TRUE)
      // Rename output file.
      byteExtensionChar = MakeCompressedName(szDestFileName);
   else
      byteExtensionChar = '\0';

   // Ask if we should compress this file.
   if (! (*pfnNotify)(pszSource, szDestFileName, NOTIFY_START_COMPRESS))
   {
      // Don't compress file.    This error condition should be handled in
      // pfnNotify, so indicate that it is not necessary for the caller to
      // display an error message.
      FCLOSE(doshSource);
      return(BLANK_ERROR);
   }

   // Set up output file handle.
   if ((nRetVal = GetIOHandle(szDestFileName, WRITE_IT, & doshDest, &pLZI->cblInSize)) != TRUE)
   {
      FCLOSE(doshSource);
      return(nRetVal);
   }

   // Fill in compressed file header.
   MakeHeader(& FHOut, byteAlgorithm, byteExtensionChar, pLZI);

   // Write compressed file header to output file.
   if ((nRetVal = WriteHdr(& FHOut, doshDest, pLZI)) != TRUE)
      goto COMPRESS_EXIT;

   // Compress input file into output file.
   switch (byteAlgorithm)
   {
      case ALG_FIRST:
#if 0
      case ALG_LZ:
#endif
         nRetVal = LZEncode(doshSource, doshDest, pLZI);
         break;

      default:
         nRetVal = LZERROR_UNKNOWNALG;
         break;
   }

   if (nRetVal != TRUE)
      goto COMPRESS_EXIT;

   // Copy date and time stamp from source file to destination file.
   nRetVal = CopyDateTimeStamp(doshSource, doshDest);

COMPRESS_EXIT:
   // Close files.
   FCLOSE(doshSource);
   FCLOSE(doshDest);

   return(nRetVal);
}
Пример #26
0
int main(int argc, char **argv, char **envp)
{
    int count;
    FCGX_Stream *paramsStream;
    fd_set readFdSet, writeFdSet;
    int numFDs, selectStatus;
    unsigned char headerBuff[8];
    int headerLen, valueLen;
    char *equalPtr;
    FCGI_BeginRequestRecord beginRecord;
    int	doBind, doStart, nServers;
    char appPath[MAXPATHLEN], bindPath[MAXPATHLEN];

    if(ParseArgs(argc, argv, &doBind, &doStart,
		   (char *) &bindPath, (char *) &appPath, &nServers)) {
	fprintf(stderr,
"Usage:\n"
"    cgi-fcgi -f <cmdPath> , or\n"
"    cgi-fcgi -connect <connName> <appPath> [<nServers>] , or\n"
"    cgi-fcgi -start -connect <connName> <appPath> [<nServers>] , or\n"
"    cgi-fcgi -bind -connect <connName> ,\n"
"where <connName> is either the pathname of a UNIX domain socket\n"
"or (if -bind is given) a hostName:portNumber specification\n"
"or (if -start is given) a :portNumber specification (uses local host).\n");
	exit(1);
    }
    if(doBind) {
        appServerSock = OS_FcgiConnect(bindPath);
    }
    if(doStart && (!doBind || appServerSock < 0)) {
        FCGI_Start(bindPath, appPath, nServers);
        if(!doBind) {
            exit(0);
        } else {
            appServerSock = OS_FcgiConnect(bindPath);
	}
    }
    if(appServerSock < 0) {
        fprintf(stderr, "Could not connect to %s\n", bindPath);
        exit(errno);
    }
    /*
     * Set an arbitrary non-null FCGI RequestId
     */
    requestId = 1;
    /*
     * XXX: Send FCGI_GET_VALUES
     */

    /*
     * XXX: Receive FCGI_GET_VALUES_RESULT
     */

    /*
     * Send FCGI_BEGIN_REQUEST (XXX: hack, separate write)
     */
    beginRecord.header = MakeHeader(FCGI_BEGIN_REQUEST, requestId,
            sizeof(beginRecord.body), 0);
    beginRecord.body = MakeBeginRequestBody(FCGI_RESPONDER, TRUE);
    count = write(appServerSock, &beginRecord, sizeof(beginRecord));
    if(count != sizeof(beginRecord)) {
        exit(errno);
    }
    /*
     * Send environment to the FCGI application server
     */
    paramsStream = CreateWriter(appServerSock, requestId, 8192, FCGI_PARAMS);
    for( ; *envp != NULL; envp++) {
        equalPtr = strchr(*envp, '=');
        if(equalPtr  == NULL) {
            exit(1000);
        }
        valueLen = strlen(equalPtr + 1);
        FCGIUtil_BuildNameValueHeader(
                equalPtr - *envp,
                valueLen,
                &headerBuff[0],
                &headerLen);
        if(FCGX_PutStr((char *) &headerBuff[0], headerLen, paramsStream) < 0
                || FCGX_PutStr(*envp, equalPtr - *envp, paramsStream) < 0
                || FCGX_PutStr(equalPtr + 1, valueLen, paramsStream) < 0) {
            exit(FCGX_GetError(paramsStream));
        }
    }
    FCGX_FClose(paramsStream);
    FreeStream(&paramsStream);
    /*
     * Perform the event loop until AppServerReadHander sees FCGI_END_REQUEST
     */
    fromWS.stop = fromWS.next = &fromWS.buff[0];
    webServerReadHandlerEOF = FALSE;
    FD_ZERO(&readFdSet);
    FD_ZERO(&writeFdSet);
    numFDs = max(appServerSock, STDIN_FILENO) + 1;
    SetFlags(appServerSock, O_NONBLOCK);
    for(;;) {
        if((fromWS.stop == fromWS.next) && !webServerReadHandlerEOF) {
            FD_SET(STDIN_FILENO, &readFdSet);
        } else {
            FD_CLR(STDIN_FILENO, &readFdSet);
        }
        if(fromWS.stop != fromWS.next) {
            FD_SET(appServerSock, &writeFdSet);
        } else {
            FD_CLR(appServerSock, &writeFdSet);
        }
        FD_SET(appServerSock, &readFdSet);
        selectStatus = select(numFDs, &readFdSet, &writeFdSet, NULL, NULL);
        if(selectStatus < 0) {
            exit(errno);
        }
        if(selectStatus == 0) {
            /*
             * Should not happen, no select timeout.
             */
            continue;
        }
        if(FD_ISSET(STDIN_FILENO, &readFdSet)) {
            WebServerReadHandler();
        }
        if(FD_ISSET(appServerSock, &writeFdSet)) {
            AppServerWriteHandler();
        }
        if(FD_ISSET(appServerSock, &readFdSet)) {
            AppServerReadHandler();
	}
        if(exitStatusSet) {
            exit(exitStatus);
	}
    } 
}
Пример #27
0
void enviaACK( BYTE dest ){
  BYTE buffer[4];

  MakeHeader( buffer, sizeof( buffer ), dest, ACK );
  enviarPacotePC( buffer, sizeof( buffer ));
}