| | |
| | | typedef enum |
| | | { |
| | | CLIENT_STATE_IDLE, |
| | | CLIENT_STATE_CONNECT_SOUCE_LIST_SERVER, |
| | | CLIENT_STATE_CONNECT_SOUCE_LIST_SERVER, |
| | | CLIENT_STATE_GET_SOUCE_LIST, |
| | | CLIENT_STATE_GET_RTCM_DATA, |
| | | CLIENT_STATE_GET_RTCM_DATA, |
| | | CLIENT_STATE_CONNECT_RTCM_DATA_SERVER, |
| | | CLIENT_STATE_GET_RTCM_DATA_SUCCESS, |
| | | CLIENT_STATE_GET_RTCM_DATA_SUCCESS, |
| | | |
| | | CLIENT_STATE_MAX, |
| | | CLIENT_STATE_MAX, |
| | | } E_ClientState; |
| | | |
| | | typedef enum |
| | |
| | | static HIDO_INT32 SendGetSourceTableRequest(void) |
| | | { |
| | | l_u32SendBuffLen = HIDO_UtilSnprintf(l_acSendBuff, sizeof(l_acSendBuff), |
| | | "GET / HTTP/1.0\r\n" \ |
| | | "User-Agent: NTRIP LefebureNTRIPClient/20131124\r\n" \ |
| | | "Accept: */*\r\n" \ |
| | | "Connection: close\r\n" \ |
| | | "Authorization: Basic %s\r\n" \ |
| | | "\r\n", l_acAuthorization); |
| | | "GET / HTTP/1.0\r\n" \ |
| | | "User-Agent: NTRIP LefebureNTRIPClient/20131124\r\n" \ |
| | | "Accept: */*\r\n" \ |
| | | "Connection: close\r\n" \ |
| | | "Authorization: Basic %s\r\n" \ |
| | | "\r\n", l_acAuthorization); |
| | | |
| | | return Socket_Send(l_i32SockID, (HIDO_UINT8 *)l_acSendBuff, l_u32SendBuffLen); |
| | | } |
| | |
| | | static HIDO_INT32 SendGetRTCMDataRequest(void) |
| | | { |
| | | l_u32SendBuffLen = HIDO_UtilSnprintf(l_acSendBuff, sizeof(l_acSendBuff), |
| | | "GET /%s HTTP/1.0\r\n" \ |
| | | "User-Agent: NTRIP LefebureNTRIPClient/20131124\r\n" \ |
| | | "Accept: */*\r\n" \ |
| | | "Connection: close\r\n" \ |
| | | "Authorization: Basic %s\r\n" \ |
| | | "\r\n", l_stMountpointAttrib.m_acName, l_acAuthorization); |
| | | "GET /%s HTTP/1.0\r\n" \ |
| | | "User-Agent: NTRIP LefebureNTRIPClient/20131124\r\n" \ |
| | | "Accept: */*\r\n" \ |
| | | "Connection: close\r\n" \ |
| | | "Authorization: Basic %s\r\n" \ |
| | | "\r\n", l_stMountpointAttrib.m_acName, l_acAuthorization); |
| | | |
| | | return Socket_Send(l_i32SockID, (HIDO_UINT8 *)l_acSendBuff, l_u32SendBuffLen); |
| | | } |
| | |
| | | do |
| | | { |
| | | i32Ret = Socket_Recv(l_i32SockID, (HIDO_UINT8 *) (l_acRecvBuff + l_u32RecvLen), |
| | | RECV_BUFF_SIZE - l_u32RecvLen, &u32RecvLen); |
| | | RECV_BUFF_SIZE - l_u32RecvLen, &u32RecvLen); |
| | | if ((i32Ret != HIDO_OK) || (0 == u32RecvLen)) |
| | | { |
| | | break; |
| | |
| | | HandleError(__debug_info__); |
| | | break; |
| | | } |
| | | |
| | | |
| | | if(CLIENT_STATE_GET_RTCM_DATA_SUCCESS == l_eClientState) |
| | | { |
| | | HandleRecvData((HIDO_UINT8 *)l_acRecvBuff, l_u32RecvLen); |
| | |
| | | if (l_pu8HTTPRespBody != HIDO_NULL) |
| | | { |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) l_acRecvBuff, u32RecvLen, "%* %d %*\r\n", |
| | | &l_u32HTTPRespCode) != 3) |
| | | &l_u32HTTPRespCode) != 3) |
| | | { |
| | | HandleError(__debug_info__); |
| | | break; |
| | | } |
| | | |
| | | |
| | | HandleRecvData(HIDO_NULL, 0); |
| | | } |
| | | } |
| | |
| | | l_pu8HTTPRespBody += 4; |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) l_acRecvBuff, u32RecvLen, "%* %d %*\r\n", |
| | | &l_u32HTTPRespCode) != 3) |
| | | &l_u32HTTPRespCode) != 3) |
| | | { |
| | | HandleError(__debug_info__); |
| | | break; |
| | |
| | | { |
| | | pcKeyName++; |
| | | } |
| | | |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pcKeyName, u32RecvLen - (pcKeyName - l_acRecvBuff), |
| | | "%d\r\n", &l_u32HTTPContentLength) != 1) |
| | | "%d\r\n", &l_u32HTTPContentLength) != 1) |
| | | { |
| | | HandleError(__debug_info__); |
| | | break; |
| | |
| | | { |
| | | switch (_eEvent) |
| | | { |
| | | case SOCKET_EVENT_CONNECT_FAILED: |
| | | case SOCKET_EVENT_CONNECT_FAILED: |
| | | { |
| | | if((CLIENT_STATE_CONNECT_SOUCE_LIST_SERVER == l_eClientState) |
| | | || (CLIENT_STATE_CONNECT_RTCM_DATA_SERVER == l_eClientState)) |
| | | { |
| | | if((CLIENT_STATE_CONNECT_SOUCE_LIST_SERVER == l_eClientState) |
| | | || (CLIENT_STATE_CONNECT_RTCM_DATA_SERVER == l_eClientState)) |
| | | { |
| | | SetClientState(CLIENT_STATE_IDLE); |
| | | ClientCallback(NTRIP_CODE_CONNECT_FAILED, HIDO_NULL, 0); |
| | | } |
| | | |
| | | break; |
| | | SetClientState(CLIENT_STATE_IDLE); |
| | | ClientCallback(NTRIP_CODE_CONNECT_FAILED, HIDO_NULL, 0); |
| | | } |
| | | case SOCKET_EVENT_CONNECTED: |
| | | |
| | | break; |
| | | } |
| | | case SOCKET_EVENT_CONNECTED: |
| | | { |
| | | l_u32RecvLen = 0; |
| | | if(CLIENT_STATE_CONNECT_SOUCE_LIST_SERVER == l_eClientState) |
| | | { |
| | | l_u32RecvLen = 0; |
| | | if(CLIENT_STATE_CONNECT_SOUCE_LIST_SERVER == l_eClientState) |
| | | { |
| | | SendGetSourceTableRequest(); |
| | | l_eRecvState = RECV_STATE_HEAD; |
| | | SetClientState(CLIENT_STATE_GET_SOUCE_LIST); |
| | | HIDO_TimerStart(l_u32TimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), TimeOutCallback, HIDO_NULL); |
| | | } |
| | | else if(CLIENT_STATE_CONNECT_RTCM_DATA_SERVER == l_eClientState) |
| | | { |
| | | SendGetRTCMDataRequest(); |
| | | l_eRecvState = RECV_STATE_HEAD; |
| | | SetClientState(CLIENT_STATE_GET_RTCM_DATA); |
| | | HIDO_TimerStart(l_u32TimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), TimeOutCallback, HIDO_NULL); |
| | | } |
| | | |
| | | break; |
| | | SendGetSourceTableRequest(); |
| | | l_eRecvState = RECV_STATE_HEAD; |
| | | SetClientState(CLIENT_STATE_GET_SOUCE_LIST); |
| | | HIDO_TimerStart(l_u32TimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), TimeOutCallback, HIDO_NULL); |
| | | } |
| | | case SOCKET_EVENT_CLOSED: |
| | | else if(CLIENT_STATE_CONNECT_RTCM_DATA_SERVER == l_eClientState) |
| | | { |
| | | if(CLIENT_STATE_CONNECT_RTCM_DATA_SERVER == l_eClientState) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | HIDO_TimerCancel(l_u32TimerID); |
| | | |
| | | if(l_eClientState != CLIENT_STATE_IDLE) |
| | | { |
| | | SetClientState(CLIENT_STATE_IDLE); |
| | | ClientCallback(NTRIP_CODE_DISCONNECT, HIDO_NULL, 0); |
| | | } |
| | | |
| | | break; |
| | | SendGetRTCMDataRequest(); |
| | | l_eRecvState = RECV_STATE_HEAD; |
| | | SetClientState(CLIENT_STATE_GET_RTCM_DATA); |
| | | HIDO_TimerStart(l_u32TimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), TimeOutCallback, HIDO_NULL); |
| | | } |
| | | case SOCKET_EVENT_RECV_DATA: |
| | | { |
| | | OnRecvData(); |
| | | break; |
| | | } |
| | | default: |
| | | |
| | | break; |
| | | } |
| | | case SOCKET_EVENT_CLOSED: |
| | | { |
| | | if(CLIENT_STATE_CONNECT_RTCM_DATA_SERVER == l_eClientState) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | HIDO_TimerCancel(l_u32TimerID); |
| | | |
| | | if(l_eClientState != CLIENT_STATE_IDLE) |
| | | { |
| | | SetClientState(CLIENT_STATE_IDLE); |
| | | ClientCallback(NTRIP_CODE_DISCONNECT, HIDO_NULL, 0); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | case SOCKET_EVENT_RECV_DATA: |
| | | { |
| | | OnRecvData(); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | * Modified Date: : 2021年5月3日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 NTRIPClient_Connect(HIDO_CHAR *_pcHost, HIDO_UINT16 _u16Port, HIDO_CHAR *_pcUsername, HIDO_CHAR *_pcPassword, |
| | | HIDO_CHAR *_pcSourceName, FN_NTRIPClientCallback _fnCallback, HIDO_VOID *_pArg) |
| | | HIDO_CHAR *_pcSourceName, FN_NTRIPClientCallback _fnCallback, HIDO_VOID *_pArg) |
| | | { |
| | | HIDO_UINT32 u32Len = 0; |
| | | |
| | |
| | | *******************************************************************************/ |
| | | HIDO_INT32 NTRIPClient_ReportGGA(HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len) |
| | | { |
| | | if(CLIENT_STATE_GET_RTCM_DATA_SUCCESS == l_eClientState) |
| | | { |
| | | Socket_Send(l_i32SockID, _pu8Data, _u32Len); |
| | | } |
| | | if(CLIENT_STATE_GET_RTCM_DATA_SUCCESS == l_eClientState) |
| | | { |
| | | Socket_Send(l_i32SockID, _pu8Data, _u32Len); |
| | | } |
| | | |
| | | return HIDO_OK; |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |