#include "gagent.h"
#include "http.h"
#include "mqttxpg.h"
#include "cloud.h"
#include "3rdcloud.h"
#include "utils.h"
#include "netevent.h"
/*
return 0 OTA SUCCESS
*/
int32 GAgent_MCUOTAByUrl( pgcontext pgc,int8 *downloadUrl )
{
int32 ret = 0;
int32 http_socketid = -1;
int8 OTA_IP[32]={0};
int8 *url = NULL;
int8 *host = NULL;
if( RET_FAILED == Http_GetHost( downloadUrl,&host,&url ) )
{
return RET_FAILED;
}
ret = GAgent_GetHostByName( host,OTA_IP );
if( ret!=0 )
{
GAgent_Printf( GAGENT_DEBUG,"file:%s function:%s line:%d ",__FILE__,__FUNCTION__,__LINE__ );
return RET_FAILED;
}
http_socketid = Cloud_InitSocket( http_socketid,OTA_IP, 80, 0 );
if( http_socketid<=0 )
return RET_FAILED;
ret = Http_ReqGetFirmware( url,host,http_socketid );
if( RET_SUCCESS == ret )
{
ret = Http_ResGetFirmware( pgc,http_socketid );
closesocket(http_socketid);
return ret;
}
else
{
GAgent_Printf(GAGENT_WARNING,"req get Firmware failed!\n");
closesocket(http_socketid);
return RET_FAILED;
}
}
uint32 GAgent_ReqServerTime(pgcontext pgc)
{
uint32 ret;
if((pgc->rtinfo.GAgentStatus&WIFI_STATION_CONNECTED) != WIFI_STATION_CONNECTED)
{
return (uint32)RET_FAILED;
}
ret = Cloud_ReqProvision( pgc );
pgc->rtinfo.waninfo.send2HttpLastTime = GAgent_GetDevTime_S();
if(0 != ret)
{
GAgent_Printf(GAGENT_WARNING,"Provision fail!\n");
return (uint32)RET_FAILED;
}
return (uint32)RET_SUCCESS;
}
uint32 GAgent_Get_Gserver_Time( uint32 *clock, uint8 *Http_recevieBuf, int32 respondCode )
{
int8 *p_start = NULL;
int8 *p_end =NULL;
int8 stime[20]={0};
uint32 time;
if( 200 != respondCode )
{
return (uint32)RET_FAILED;
}
p_start = strstr((char *)Http_recevieBuf, "server_ts=");
if( p_start==NULL )
return (uint32)RET_FAILED;
p_start = p_start+strlen("server_ts=");
p_end = strstr( p_start,"&" );
if( p_end == NULL )
{
p_end = strstr( p_start,"\r" );
}
memcpy(stime,p_start,( p_end-p_start));
time = atoi(stime);
*clock = time;
return (uint32)RET_SUCCESS;
}
/****************************************************************
FunctionName : GAgent_Cloud_SendData
Description : send buf data to M2M server.
return : 0-ok
other fail.
Add by Alex.lin --2015-03-17
****************************************************************/
uint32 GAgent_Cloud_SendData( pgcontext pgc,ppacket pbuf,int32 buflen )
{
int8 ret = 0;
uint16 cmd;
stCloudAttrs_t *client = &pgc->rtinfo.stChannelAttrs.cloudClient;
cmd = client->cmd;
if( isPacketTypeSet( pbuf->type,CLOUD_DATA_OUT ) == 1)
{
pbuf->type = SetPacketType( pbuf->type,CLOUD_DATA_OUT,0 );
ret = MQTT_SendData( pgc, pgc->gc.DID, pbuf,buflen );
GAgent_Printf(GAGENT_INFO,"Send date to cloud :len =%d ,ret =%d",buflen,ret );
}
return ret;
}
/****************************************************************
Function : Cloud_InitSocket
Description : init socket connect to server.
iSocketId : socketid.
p_szServerIPAddr: server ip address like "192.168.1.1"
port : server socket port.
flag : =0 init socket in no block.
=1 init socket in block.
return : >0 the cloud socket id
<=0 fail.
****************************************************************/
int32 Cloud_InitSocket( int32 iSocketId,int8 *p_szServerIPAddr,int32 port,int8 flag )
{
int32 ret=0;
int32 tempSocketId=0;
uint8 reconnectTime=0;
ret = strlen( p_szServerIPAddr );
if( ret<=0 || ret> 17 )
return RET_FAILED;
GAgent_Printf(GAGENT_DEBUG,"socket connect cloud ip:%s .",p_szServerIPAddr);
if( iSocketId > 0 )
{
GAgent_Printf(GAGENT_DEBUG, "Cloud socket need to close SocketID:[%d]", iSocketId );
closesocket( iSocketId );
iSocketId = INVALID_SOCKET;
}
if( (iSocketId = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))<=0)
{
GAgent_Printf(GAGENT_ERROR," Cloud socket init fail");
return RET_FAILED;
}
tempSocketId = iSocketId;
GAgent_Printf(GAGENT_DEBUG, "New cloud socketID [%d]",iSocketId);
while( reconnectTime<3 )
{
iSocketId = GAgent_connect( iSocketId, port, p_szServerIPAddr,flag );
if( iSocketId>=0 )
break;
GAgent_Printf( GAGENT_WARNING,"GAgent_connect fail , do it again !!!");
reconnectTime++;
rt_thread_sleep(MSec(100));
}
if ( iSocketId <0 )
{
closesocket( tempSocketId );
iSocketId=INVALID_SOCKET;
GAgent_Printf(GAGENT_ERROR, "Cloud socket connect fail with:%d", ret);
return -3;
}
return iSocketId;
}
/****************************************************************
Function : Cloud_ReqRegister
description : sent register data to cloud
Input : NULL;
return : 0-send register data ok.
other fail.
add by Alex.lin --2015-03-02
****************************************************************/
uint32 Cloud_ReqRegister( pgcontext pgc )
{
uint32 socket = 0;
int8 ret = 0;
pgcontext pGlobalVar=NULL;
pgconfig pConfigData=NULL;
pGlobalVar=pgc;
pConfigData = &(pgc->gc);
pGlobalVar->rtinfo.waninfo.http_socketid = Cloud_InitSocket( pGlobalVar->rtinfo.waninfo.http_socketid,pConfigData->GServer_ip,80,0 );
socket = pGlobalVar->rtinfo.waninfo.http_socketid ;
if( socket<=0 )
{
return (uint32)RET_FAILED;
}
ret = Http_POST( socket, HTTP_SERVER,pConfigData->wifipasscode,(char *)pGlobalVar->minfo.szmac,
(char *)pGlobalVar->mcu.product_key );
if( RET_SUCCESS!=ret )
{
return (uint32)RET_FAILED;
}
else
{
return (uint32)RET_SUCCESS;
}
}
/*
will get the device id.
*/
int32 Cloud_ResRegister( uint8 *cloudConfiRxbuf,int32 buflen,int8 *pDID,int32 respondCode )
{
int32 ret=0;
if( 201 != respondCode)
return RET_FAILED;
ret = Http_Response_DID( cloudConfiRxbuf,pDID );
if( RET_SUCCESS==ret )
{
return RET_SUCCESS;
}
else
return RET_FAILED;
}
uint32 Cloud_ReqGetSoftver( pgcontext pgc,enum OTATYPE_T type )
{
int32 socket = 0;
int8 *hver, *sver;
pgcontext pGlobalVar=NULL;
pgconfig pConfigData=NULL;
pGlobalVar=pgc;
pConfigData = &(pgc->gc);
pGlobalVar->rtinfo.waninfo.http_socketid = Cloud_InitSocket( pGlobalVar->rtinfo.waninfo.http_socketid,pConfigData->GServer_ip,80,0 );
socket = pGlobalVar->rtinfo.waninfo.http_socketid;
if( socket<=0 )
return (uint32)RET_FAILED;
GAgent_Printf(GAGENT_DEBUG, "http socket connect OK with:%d", socket);
switch( type )
{
case OTATYPE_WIFI:
hver = WIFI_HARDVER;
sver = WIFI_SOFTVAR;
break;
case OTATYPE_MCU:
hver = (char *)(pGlobalVar->mcu.hard_ver);
sver = (char *)pGlobalVar->mcu.soft_ver;
break;
default:
GAgent_Printf( GAGENT_WARNING,"GAgent OTA type is invalid! ");
return (uint32)RET_FAILED;
}
CheckFirmwareUpgrade( HTTP_SERVER,pConfigData->DID,type,pConfigData->wifipasscode,hver,sver,socket );
return (uint32)RET_SUCCESS;
}
/****************************************************************
* FunctionName : Cloud_ResGetSoftver.
* Description : get firmwarm download url and software version.
* buf : data form cloud afte
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
MQTT-3.1.3.zip (45个子文件)
gagent
lan_cut.c 12KB
mqttxpg.h 1KB
3rdcloud.c 373B
netevent.h 140B
lanudp.h 113B
hal_receive.h 539B
3rdcloud.h 131B
mqttlib.h 9KB
gagent_md5.c 5KB
cloud.h 2KB
lantcp.c 18KB
iof_arch.h 3KB
cloud.c 56KB
main.c 589B
user_misc.c 13KB
local.c 44KB
gagent_netevent.c 21KB
gagent.h 12KB
gagent_md5.h 1KB
platform.h 991B
mqttbase.h 910B
lanudp.c 7KB
hal_receive.c 10KB
oldconfigstruct.h 1KB
adapter_linux.c 16KB
utilcoding.c 12KB
netevent.c 6KB
gprs.c 2KB
lan.c 17KB
mqttxpg.c 19KB
local.h 1KB
mqttbase.c 5KB
gprs.h 658B
mqttlib.c 23KB
3rdlan.h 488B
gagent.c 27KB
utils.h 900B
local_common.c 9KB
http.h 2KB
webconfig.c 6KB
http.c 24KB
gagent_typedef.h 8KB
local_simu.c 5KB
3rdlan.c 11KB
lan.h 2KB
共 45 条
- 1
靓仔的烦恼
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页