www.pudn.com > tvctrl.rar > httpreq.c
#include "httpreq.h"
#include "tvmisc.h"
#define HTTP_DOWNLOAD_MAX_RETRY 3
#define HTTP_URLSET_FILE "/etc/update.conf"
#define HTTP_URLSET_SECTION "SETTING"
#define HTTP_URLSET_KEY "serverurl"
#define GLH_DEBUG(x...) fprintf(stderr,x)
/*
static char *host_url = "http://www.5tcl.com/" ;
*/
static char *default_host_url = "http://192.168.1.21:80/" ;
static char host_url[128] = {0} ;
static int url_request(unsigned char *url, int method, char **pdata, int *pdatalen, LPHTTPSINK sink) ;
static int GetFieldStrValue(char **pstr, char *FieldName, char *FieldValue, int FieldValueBufLen) ;
static int GetFieldFromString(char *str, char *TableName, int TableNameBufLen,
int *pDataOff, int *pDataLen, int *pZipLen) ;
static int GetFieldFromStringEx(char *str, char *TableName, int TableNameBufLen,
int **ppDataOff, int *pDataSegNums, int *pDataLen, int *pZipLen) ;
static int DumpRecvTitle(char *str) ;
static int DumpTvTypeTbl(FILE *out, TVTYPE *tbl, int nums) ;
static int DumpTvNameTbl(FILE *out, TVINFO *tbl, int nums) ;
static int DumpPlayTbl(FILE *out, EPGRECORD *tbl, int nums) ;
static int DumpProgTbl(FILE *out, PROGRAMRECORD *tbl, int nums, char *name, int len) ;
static int DumpProgDescTbl(FILE *out, char *desc, int len) ;
static int DumpProgTypeTbl(FILE *out, TYPERECORD *tbl, int nums) ;
static int DownloadHttpFileRequest(unsigned char *url,int method,char **data,int *len,LPHTTPSINK sink) ;
static int UploadHttpFileRequest(unsigned char *url,int method,char *data,int len,LPHTTPSINK sink) ;
/*
url: 请求的url
pdata: 指向返回的数据区
pdatalen: 数据长度
sink: 回调函数
*/
static int url_request(unsigned char *url, int method, char **data, int *len, LPHTTPSINK sink)
{
ghttp_request * req;
char * buff;
int bodylen;
ghttp_status status;
unsigned char *parameter ;
unsigned char *uri ;
unsigned char *mix_url ;
if (url == NULL
|| data == NULL
|| len == NULL
)
return (HTTP_GENERAL_ERROR) ;
uri = (unsigned char *)malloc(1024);
mix_url = (unsigned char *)malloc(2048);
if (host_url[0])
{
sprintf(mix_url, "%s%s", host_url, url) ;
}
else
if (GetValueFromIniFile(HTTP_URLSET_FILE, HTTP_URLSET_SECTION,
HTTP_URLSET_KEY, mix_url, 2048) == ETC_OK
)
{
strcat(mix_url, url) ;
}
else
if (default_host_url
&& default_host_url[0]
)
{
sprintf(mix_url, "%s%s", default_host_url, url) ;
}
else
{
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_URL_ERROR;
}
url = mix_url ;
parameter = (unsigned char *)strstr((const char *)url,"?");
#ifdef __DEBUG__
printf("url:%s\n", url) ;
printf("uri:%s\n", uri) ;
#endif
bzero(uri,1024);
req = ghttp_request_new();
ghttp_set_chunksize(req,4096);
if(parameter)
{
parameter++;
strncpy((char *)uri, (char *)url, parameter-url-1);
if(method & HTTP_METHOD_GET)
{
if(ghttp_set_uri(req, (char *)url)==-1)
{
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_URL_ERROR;
}
}
else
{
if(ghttp_set_uri(req, (char *)uri)==-1)
{
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_URL_ERROR;
}
ghttp_set_type(req, ghttp_type_post);
ghttp_set_body(req, (char *)parameter, strlen((char *)parameter));
}
}
else
{
if(ghttp_set_uri(req,(char *)url)==-1)
{
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_URL_ERROR;
}
}
ghttp_set_sync(req, ghttp_async);
ghttp_prepare(req);
do
{
status = ghttp_process(req);
if (status == ghttp_error)
{
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_PROCESS_ERROR;
}
if(!(method & HTTP_METHOD_WHOLE))
{
int procLen = ghttp_get_body_len(req);
if(procLen > 0)
{
if(status != ghttp_done)
{
ghttp_flush_response_buffer(req);
}
}
}
buff = ghttp_get_body(req);
bodylen = ghttp_get_body_len(req);
if(sink && sink(buff,bodylen) == 0)
{
if(status == ghttp_not_done)
{
status = ghttp_error;
ghttp_request_destroy(req);
}
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_SINK_CANCEL;
}
}while (status == ghttp_not_done);
if(ghttp_status_code(req) == 302)
{
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_URL_REMOVE ;
}
if(data)
{
buff = ghttp_get_body(req);
bodylen = ghttp_get_body_len(req);
*data = NULL;
*len = bodylen;
if(bodylen > 0 &&
(method & HTTP_METHOD_WHOLE))
{
*data = (char *)malloc(bodylen);
memcpy(*data,buff,bodylen);
}
}
ghttp_request_destroy(req);
free ((unsigned char *)uri);
free ((unsigned char *)mix_url);
return HTTP_NO_ERROR;
}
static int DownloadHttpFileRequest(unsigned char *url,int method,char **data,int *len,LPHTTPSINK sink)
{
int result = -1 ;
result = url_request(url, method, data, len, sink) ;
return (result) ;
}
static int UploadHttpFileRequest(unsigned char *url,int method,char *data,int len,LPHTTPSINK sink)
{
int result = -1 ;
return (result) ;
}
// 台名类型表
int GetTvTypeTbl(char *HostType, char *UserId, char *UserPwd, char *PostId,
int method, char **pdata, int *pdatalen, LPHTTPSINK sink)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
char *nullstr = "" ;
char *host_type ;
char *user_id ;
char *user_pwd ;
char *post_id ;
host_type = (HostType?HostType:nullstr) ;
user_id = (UserId?UserId:nullstr) ;
user_pwd = (UserPwd?UserPwd:nullstr) ;
post_id = (PostId?PostId:nullstr) ;
sprintf(tmpstr, "EpgSvr/EpgSvr.dll?GetTvTypeTbl?HostType=%s&UserId=%s&UserPwd=%s&PostId=%s",
host_type, user_id, user_pwd, post_id
) ;
r = DownloadHttpFileRequest(tmpstr, method, pdata, pdatalen, sink) ;
result = r ;
return (result) ;
}
// 台名表
int GetTvNameTbl(char *HostType, char *UserId, char *UserPwd, char *PostId,
int method, char **pdata, int *pdatalen, LPHTTPSINK sink)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
char *nullstr = "" ;
char *host_type ;
char *user_id ;
char *user_pwd ;
char *post_id ;
host_type = (HostType?HostType:nullstr) ;
user_id = (UserId?UserId:nullstr) ;
user_pwd = (UserPwd?UserPwd:nullstr) ;
post_id = (PostId?PostId:nullstr) ;
sprintf(tmpstr, "EpgSvr/EpgSvr.dll?GetTvNameTbl?HostType=%s&UserId=%s&UserPwd=%s&PostId=%s",
host_type, user_id, user_pwd, post_id
) ;
r = DownloadHttpFileRequest(tmpstr, method, pdata, pdatalen, sink) ;
result = r ;
return (result) ;
}
// 播放表
int GetPlayTbl(char *HostType, char *UserId, char *UserPwd, char *PostId,
time_t StartDateTime, time_t EndDateTime, int TvId,
int method, char **pdata, int *pdatalen, LPHTTPSINK sink)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
char tvidstr[16] ;
char *nullstr = "" ;
char *host_type ;
char *user_id ;
char *user_pwd ;
char *post_id ;
host_type = (HostType?HostType:nullstr) ;
user_id = (UserId?UserId:nullstr) ;
user_pwd = (UserPwd?UserPwd:nullstr) ;
post_id = (PostId?PostId:nullstr) ;
if (TvId > 0)
sprintf(tvidstr, "%d", TvId) ;
else
tvidstr[0] = 0x00 ;
sprintf(tmpstr, "EpgSvr/EpgSvr.dll?GetPlayTbl?HostType=%s&UserId=%s&UserPwd=%s&PostId=%s&StartDateTime=%ld&EndDateTime=%ld&TvId=%s",
host_type, user_id, user_pwd, post_id,
StartDateTime, EndDateTime, tvidstr
) ;
r = DownloadHttpFileRequest(tmpstr, method, pdata, pdatalen, sink) ;
result = r ;
return (result) ;
}
// 节目表
int GetProgTbl(char *HostType, char *UserId, char *UserPwd, char *PostId,
int method, char **pdata, int *pdatalen, LPHTTPSINK sink)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
char *nullstr = "" ;
char *host_type ;
char *user_id ;
char *user_pwd ;
char *post_id ;
host_type = (HostType?HostType:nullstr) ;
user_id = (UserId?UserId:nullstr) ;
user_pwd = (UserPwd?UserPwd:nullstr) ;
post_id = (PostId?PostId:nullstr) ;
sprintf(tmpstr, "EpgSvr/EpgSvr.dll?GetProgTbl?HostType=%s&UserId=%s&UserPwd=%s&PostId=%s",
host_type, user_id, user_pwd, post_id
) ;
r = DownloadHttpFileRequest(tmpstr, method, pdata, pdatalen, sink) ;
result = r ;
return (result) ;
}
// 节目描述表
int GetProgDescTbl(char *HostType, char *UserId, char *UserPwd, char *PostId,
int ProgId,
int method, char **pdata, int *pdatalen, LPHTTPSINK sink)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
char progidstr[16] ;
char *nullstr = "" ;
char *host_type ;
char *user_id ;
char *user_pwd ;
char *post_id ;
host_type = (HostType?HostType:nullstr) ;
user_id = (UserId?UserId:nullstr) ;
user_pwd = (UserPwd?UserPwd:nullstr) ;
post_id = (PostId?PostId:nullstr) ;
if (ProgId > 0)
sprintf(progidstr, "%d", ProgId) ;
else
progidstr[0] = 0x00 ;
sprintf(tmpstr, "EpgSvr/EpgSvr.dll?GetProgDescTbl?HostType=%s&UserId=%s&UserPwd=%s&PostId=%s&ProgId=%s",
host_type, user_id, user_pwd, post_id,
progidstr
) ;
r = DownloadHttpFileRequest(tmpstr, method, pdata, pdatalen, sink) ;
result = r ;
return (result) ;
}
// 节目类型表
int GetProgTypeTbl(char *HostType, char *UserId, char *UserPwd, char *PostId,
int method, char **pdata, int *pdatalen, LPHTTPSINK sink)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
char *nullstr = "" ;
char *host_type ;
char *user_id ;
char *user_pwd ;
char *post_id ;
host_type = (HostType?HostType:nullstr) ;
user_id = (UserId?UserId:nullstr) ;
user_pwd = (UserPwd?UserPwd:nullstr) ;
post_id = (PostId?PostId:nullstr) ;
sprintf(tmpstr, "EpgSvr/EpgSvr.dll?GetProgTypeTbl?HostType=%s&UserId=%s&UserPwd=%s&PostId=%s",
host_type, user_id, user_pwd, post_id
) ;
r = DownloadHttpFileRequest(tmpstr, method, pdata, pdatalen, sink) ;
result = r ;
return (result) ;
}
static char *HttpHeadTitle[] =
{
"Table=",
"DataOff=",
"DataLen=",
"ZipLen="
} ;
static int GetFieldStrValue(char **pstr, char *FieldName, char *FieldValue, int FieldValueBufLen)
{
int result = -1 ;
int i, j ;
if (pstr
&& *pstr
&& FieldName
&& FieldValue
&& FieldValueBufLen > 0
)
{
int len = strlen(FieldName) ;
char *p = *pstr ;
char **pp = pstr ;
if (strncmp(p, FieldName, len) == 0)
{
i = len ;
for (j=i; ; j++)
{
if (p[j] == 0x00
|| p[j] == '&'
)
{
if ((j-i) < FieldValueBufLen
&& (j-i) > 0
)
{
memcpy(FieldValue, p+i, (j-i)) ;
FieldValue[j-i] = 0x00 ;
if (p[j] == 0x00)
*pp = *pp + j ;
else
*pp = *pp + j + 1 ;
result = 0 ;
}
else
if ((j-i) > 0)
{
memcpy(FieldValue, p+i, FieldValueBufLen-1) ;
FieldValue[FieldValueBufLen-1] = 0x00 ;
if (p[j] == 0x00)
*pp = *pp + j ;
else
*pp = *pp + j + 1 ;
result = 1 ;
}
else
{
}
break ;
}
}
}
}
return (result) ;
}
static int GetFieldFromString(char *str, char *TableName, int TableNameBufLen,
int *pDataOff, int *pDataLen, int *pZipLen)
{
int result = -1 ;
int r ;
char tmpstr[128] ;
if (str
&& TableNameBufLen > 0
&& TableName
&& pDataOff
&& pDataLen
&& pZipLen
)
{
char *p = str ;
r = GetFieldStrValue(&p, HttpHeadTitle[0], TableName, TableNameBufLen) ;
if (r != 0)
goto done ;
if (!(p
&& p[0]
&& ((r = GetFieldStrValue(&p, HttpHeadTitle[1], tmpstr, (int)sizeof(tmpstr))) == 0)
)
)
goto done ;
*pDataOff = atoi(tmpstr) ;
if (!(p
&& p[0]
&& ((r = GetFieldStrValue(&p, HttpHeadTitle[2], tmpstr, (int)sizeof(tmpstr))) == 0)
)
)
goto done ;
*pDataLen = atoi(tmpstr) ;
if (!(p
&& p[0]
&& ((r = GetFieldStrValue(&p, HttpHeadTitle[3], tmpstr, (int)sizeof(tmpstr))) == 0)
)
)
goto done ;
*pZipLen = atoi(tmpstr) ;
result = 0 ;
}
done:
return (result) ;
}
static int GetFieldFromStringEx(char *str, char *TableName, int TableNameBufLen,
int **ppDataOff, int *pDataSegNums, int *pDataLen, int *pZipLen)
{
int result = -1 ;
int i, segs ;
int r ;
char tmpstr[128] ;
if (str
&& TableNameBufLen > 0
&& TableName
&& ppDataOff
&& pDataSegNums
&& pDataLen
&& pZipLen
)
{
char *p = str ;
char *pp ;
r = GetFieldStrValue(&p, HttpHeadTitle[0], TableName, TableNameBufLen) ;
if (r != 0)
goto done ;
pp = p ;
for (i=0,segs=0; ; i++)
{
if (p
&& p[0]
)
{
r = GetFieldStrValue(&p, HttpHeadTitle[1], tmpstr, (int)sizeof(tmpstr)) ;
if (r >= 0)
segs++ ;
else
break ;
}
}
if (segs > 0
&& (*ppDataOff = (int *)malloc(sizeof(int)*segs))
)
{
/* 还原 */
p = pp ;
for (i=0; i 0
)
{
char TableName[32] = {0} ;
int DataOff = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
r = GetFieldFromString(p, TableName, (int)sizeof(TableName), &DataOff, &DataLen, &ZipLen) ;
if (DataOff > 0
&& DataLen > 0
&& DataLen > DataOff
)
{
int itemNums = (DataLen-DataOff)/sizeof(TVTYPE) ;
if (itemNums > 0)
{
if (tvtype)
*tvtype = (TVTYPE *)(p+DataOff) ;
if (nums)
*nums = itemNums ;
result = 0 ;
}
}
}
pTvTypeTblData = p ;
return (result) ;
}
int FreeTvTypeTblData()
{
int result = 0 ;
if (pTvTypeTblData) {free(pTvTypeTblData) ; pTvTypeTblData = NULL ;}
return (result) ;
}
/*======================================================*/
int GetTvNameTblData(TVINFO **tvinfo, int *nums)
{
int result = -1 ;
int r ;
char *p = NULL ;
int len = 0 ;
r = GetTvNameTbl(NULL, NULL, NULL, NULL, HTTP_METHOD_GET|HTTP_METHOD_WHOLE, &p, &len, 0) ;
if (r == 0
&& p
&& len > 0
)
{
char TableName[32] = {0} ;
int DataOff = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
GLH_DEBUG("\nGetTvNameTblData>>>p=%08x,len=%d",p,len);
r = GetFieldFromString(p, TableName, (int)sizeof(TableName), &DataOff, &DataLen, &ZipLen) ;
if (DataOff > 0
&& DataLen > 0
&& DataLen > DataOff
)
{
int itemNums = (DataLen-DataOff)/sizeof(TVINFO) ;
GLH_DEBUG("\nGetTvNameTblData>>>itmeNums=%d",itemNums);
if (itemNums > 0)
{
if (tvinfo)
*tvinfo = (TVINFO *)(p+DataOff) ;
if (nums)
*nums = itemNums ;
result = 0 ;
}
}
}
pTvNameTblData = p ;
return (result) ;
}
int FreeTvNameTblData()
{
int result = 0 ;
if (pTvNameTblData) {free(pTvNameTblData) ; pTvNameTblData = NULL ;}
return (result) ;
}
/*======================================================*/
int GetPlayTblData(EPGRECORD **epgrecord, int *nums, char **progdesc, int *progdesclen, time_t starttime, time_t endtime, int tvid)
{
int result = -1 ;
int r ;
char *p = NULL ;
int len = 0 ;
r = GetPlayTbl(NULL, NULL, NULL, NULL,
starttime, endtime, tvid,
HTTP_METHOD_GET|HTTP_METHOD_WHOLE, &p, &len, 0) ;
if (r == 0
&& p
&& len > 0
)
{
char TableName[32] = {0} ;
int *pDataOff = NULL ;
int DataSegNums = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
r = GetFieldFromStringEx(p, TableName, (int)sizeof(TableName), &pDataOff, &DataSegNums, &DataLen, &ZipLen) ;
#ifdef __DEBUG__
printf("GetFieldFromStringEx(), DataSegNums=%d \n", DataSegNums) ;
#endif
if (DataSegNums > 0
&& pDataOff
&& pDataOff[0] > 0
&& DataLen > 0
&& DataLen > pDataOff[0]
)
{
int itemNums ;
int textLen ;
if (DataSegNums > 1
&& pDataOff[1] > 0
&& pDataOff[1] >= pDataOff[0]
&& DataLen >= pDataOff[1]
)
{
itemNums = (pDataOff[1]-pDataOff[0])/sizeof(EPGRECORD) ;
textLen = DataLen-pDataOff[1] ;
if (itemNums > 0)
{
if (epgrecord)
*epgrecord = (EPGRECORD *)(p+pDataOff[0]) ;
if (nums)
*nums = itemNums ;
if (progdesc)
*progdesc = (char *)(p+pDataOff[1]) ;
if (progdesclen)
*progdesclen = textLen ;
result = 0 ;
}
}
else
if (DataSegNums == 1)
{
itemNums = (DataLen-pDataOff[0])/sizeof(EPGRECORD) ;
if (itemNums > 0)
{
if (epgrecord)
*epgrecord = (EPGRECORD *)(p+pDataOff[0]) ;
if (nums)
*nums = itemNums ;
if (progdesc)
*progdesc = (char *)NULL ;
if (progdesclen)
*progdesclen = 0 ;
result = 0 ;
}
}
}
/* 释放GetFieldFromStringEx()中分配的内存 */
if (pDataOff) free(pDataOff) ;
}
pPlayTblData = p ;
return (result) ;
}
int FreePlayTblData()
{
int result = 0 ;
if (pPlayTblData) {free(pPlayTblData) ; pPlayTblData = NULL ;}
return (result) ;
}
/*======================================================*/
int GetProgTblData(PROGRAMRECORD **programrecord, int *nums, char **programname, int *programnamelen)
{
int result = -1 ;
int r ;
char *p = NULL ;
int len = 0 ;
r = GetProgTbl(NULL, NULL, NULL, NULL,
HTTP_METHOD_GET|HTTP_METHOD_WHOLE, &p, &len, 0) ;
if (r == 0
&& p
&& len > 0
)
{
char TableName[32] = {0} ;
int *pDataOff = NULL ;
int DataSegNums = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
r = GetFieldFromStringEx(p, TableName, (int)sizeof(TableName), &pDataOff, &DataSegNums, &DataLen, &ZipLen) ;
#ifdef __DEBUG__
printf("GetFieldFromStringEx(), DataSegNums=%d \n", DataSegNums) ;
#endif
if (pDataOff
&& DataSegNums == 2
&& pDataOff[0] > 0
&& pDataOff[1] > pDataOff[0]
&& DataLen > 0
&& DataLen > pDataOff[1]
)
{
int itemNums = (pDataOff[1]-pDataOff[0])/sizeof(PROGRAMRECORD) ;
if (itemNums > 0)
{
if (programrecord)
*programrecord = (PROGRAMRECORD *)(p+pDataOff[0]) ;
if (nums)
*nums = itemNums ;
if (programname)
*programname = (char *)(p+pDataOff[1]) ;
if (programnamelen)
*programnamelen = DataLen-pDataOff[1] ;
result = 0 ;
}
#ifdef __DEBUG__
printf("GetProgTblData(), DataLen=%d itemNums=%d pDataOff[0]=%d pDataOff[1]=%d \n",
DataLen, itemNums, pDataOff[0], pDataOff[1]) ;
#endif
}
/* 释放GetFieldFromStringEx()中分配的内存 */
if (pDataOff) free(pDataOff) ;
}
pProgTblData = p ;
return (result) ;
}
int FreeProgTblData()
{
int result = 0 ;
if (pProgTblData) {free(pProgTblData) ; pProgTblData = NULL ;}
return (result) ;
}
/*======================================================*/
int GetProgDescTblData(char **progdesc, int *nums, int progid)
{
int result = -1 ;
int r ;
char *p = NULL ;
int len = 0 ;
r = GetProgDescTbl(NULL, NULL, NULL, NULL,
progid,
HTTP_METHOD_GET|HTTP_METHOD_WHOLE, &p, &len, 0) ;
if (r == 0
&& p
&& len > 0
)
{
char TableName[32] = {0} ;
int DataOff = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
r = GetFieldFromString(p, TableName, (int)sizeof(TableName), &DataOff, &DataLen, &ZipLen) ;
if (DataOff > 0
&& DataLen > 0
&& DataLen > DataOff
)
{
if (progdesc)
*progdesc = (char *)(p+DataOff) ;
if (nums)
*nums = 1 ;
result = 0 ;
}
}
pProgDescTblData = p ;
return (result) ;
}
int FreeProgDescTblData()
{
int result = 0 ;
if (pProgDescTblData) {free(pProgDescTblData) ; pProgDescTblData = NULL ;}
return (result) ;
}
/*======================================================*/
int GetProgTypeTblData(TYPERECORD **typerecord, int *nums)
{
int result = -1 ;
int r ;
char *p = NULL ;
int len = 0 ;
r = GetProgTypeTbl(NULL, NULL, NULL, NULL, HTTP_METHOD_GET|HTTP_METHOD_WHOLE, &p, &len, 0) ;
if (r == 0
&& p
&& len > 0
)
{
char TableName[32] = {0} ;
int DataOff = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
r = GetFieldFromString(p, TableName, (int)sizeof(TableName), &DataOff, &DataLen, &ZipLen) ;
if (DataOff > 0
&& DataLen > 0
&& DataLen > DataOff
)
{
int itemNums = (DataLen-DataOff)/sizeof(TYPERECORD) ;
if (itemNums > 0)
{
if (typerecord)
*typerecord = (TYPERECORD *)(p+DataOff) ;
if (nums)
*nums = itemNums ;
result = 0 ;
}
}
}
pProgTypeTblData = p ;
return (result) ;
}
int FreeProgTypeTblData()
{
int result = 0 ;
if (pProgTypeTblData) {free(pProgTypeTblData) ; pProgTypeTblData = NULL ;}
return (result) ;
}
/*======================================================*/
int HttpSetHostUrl(char *url)
{
int result = -1 ;
if (url
&& url[0]
&& strlen(url) < sizeof(host_url)
)
{
strcpy(host_url, url) ;
result = 0 ;
}
return (result) ;
}
int HttpGetHostUrl(char *urlbuf, int buflen)
{
int result = -1 ;
if (urlbuf
&& host_url[0]
&& buflen > strlen(host_url)
)
{
strcpy(urlbuf, host_url) ;
result = 0 ;
}
else
if (urlbuf
&& buflen > 0
&& GetValueFromIniFile(HTTP_URLSET_FILE, HTTP_URLSET_SECTION,
HTTP_URLSET_KEY, urlbuf, buflen) == ETC_OK
)
{
result = 0 ;
}
else
if (urlbuf
&& default_host_url
&& default_host_url[0]
&& buflen > strlen(default_host_url)
)
{
strcpy(urlbuf, default_host_url) ;
result = 0 ;
}
return (result) ;
}
int HttpEmptyHostUrl()
{
int result = 0 ;
bzero(host_url,sizeof(host_url)) ;
return (result) ;
}
/*======================================================*/
static int DumpRecvTitle(char *str)
{
int result = 0 ;
int r ;
int i ;
if (str
&& str[0]
)
{
char TableName[32] = {0} ;
int *pDataOff = NULL ;
int DataSegNums = 0 ;
int DataLen = 0 ;
int ZipLen = 0 ;
char *p = str ;
r = GetFieldFromStringEx(p, TableName, (int)sizeof(TableName), &pDataOff, &DataSegNums, &DataLen, &ZipLen) ;
printf("GetFieldFromString()=%d \n", r) ;
if (r == 0
&& pDataOff
&& DataSegNums > 0
)
{
printf("\n result: TableName=\"%s\" DataSegNums=%d DataLen=%d ZipLen=%d \n\n", TableName, DataSegNums, DataLen, ZipLen) ;
for (i=0; i 0
)
{
for (i=0; itype_id, (tbl+i)->sortindex, (tbl+i)->flags, (tbl+i)->type_name) ;
}
result = 0 ;
}
return (result) ;
}
static int DumpTvNameTbl(FILE *out, TVINFO *tbl, int nums)
{
int result = -1 ;
int r ;
int i ;
fprintf(out, "\n\n *****OUTPUT \"TvNameTbl\"***** \n") ;
fprintf(out, "tvid\t type_id\t name \n") ;
if (out
&& tbl
&& nums > 0
)
{
for (i=0; itvid, (tbl+i)->type_id, (tbl+i)->name) ;
}
result = 0 ;
}
return (result) ;
}
static int DumpPlayTbl(FILE *out, EPGRECORD *tbl, int nums)
{
int result = -1 ;
int r ;
int i ;
fprintf(out, "\n\n *****OUTPUT \"TvTypeTbl\"***** \n") ;
fprintf(out, "programid\t con_time\t tvid\t chapter\t playtime\n") ;
if (out
&& tbl
&& nums > 0
)
{
for (i=0; iplaytime)) ;
fprintf(out, "%10d\t %10d\t %10d\t %10d\t ", (tbl+i)->programid, (tbl+i)->con_time, (tbl+i)->tvid, (tbl+i)->chapter) ;
if (t)
{
fprintf(out, "%04d-%02d-%02d %02d:%02d:%02d\n", (int)(t->tm_year+1900), (int)t->tm_mon, (int)t->tm_mday,
(int)t->tm_hour, (int)t->tm_min, (int)t->tm_sec) ;
}
else
{
fprintf(out, " *?*?*?*?*?\n") ;
}
}
result = 0 ;
}
return (result) ;
}
static int DumpProgTbl(FILE *out, PROGRAMRECORD *tbl, int nums, char *name, int len)
{
int result = -1 ;
int r ;
int i ;
fprintf(out, "\n\n *****OUTPUT \"ProgTbl\"***** \n") ;
fprintf(out, "\n programid\t maintype\t subtype\t infoindex\t name \n") ;
if (out
&& tbl
&& nums > 0
)
{
for (i=0; iprogramid, (int)(tbl+i)->maintype, (int)(tbl+i)->subtype) ;
if ((tbl+i)->name
&& ((int)((tbl+i)->name)) > 0
&& ((int)((tbl+i)->name)) < len
)
{
fprintf(out, " %s\n", (name+(int)((tbl+i)->name))) ;
}
else
if ((tbl+i)->name)
{
fprintf(out, " XXXXX\n") ;
}
else
{
fprintf(out, " ????? \n") ;
}
}
result = 0 ;
}
return (result) ;
}
static int DumpProgDescTbl(FILE *out, char *desc, int len)
{
int result = -1 ;
int r ;
int i ;
fprintf(out, "\n\n *****OUTPUT \"ProgDescTbl\"***** \n") ;
if (out
&& desc
&& len > 0
)
{
result = 0 ;
}
return (result) ;
}
static int DumpProgTypeTbl(FILE *out, TYPERECORD *tbl, int nums)
{
int result = -1 ;
int r ;
int i ;
fprintf(out, "\n\n *****OUTPUT \"ProgTypeTbl\"***** \n") ;
fprintf(out, "type_id\t type_name \n") ;
if (out
&& tbl
&& nums > 0
)
{
for (i=0; itype_id, (tbl+i)->type_name) ;
}
result = 0 ;
}
return (result) ;
}