www.pudn.com > Net_apps.rar > TurnData.c
//*************************************************************
// Copyright 2003 Service & Quality Technology CO., LTD.
// ALL RIGHTS RESERVED.
// This software is provided under license and contains proprietary
// and confidential material which is the property of SQ tech.
//
// FileName : TurnData.c
// Description :
// Reversion : 0.1 ,Date : 2004/03/24 ,Author : gofly
// Comment : first implementation
//
//*************************************************************
#include "..\include\L3\net_apps\TurnData.h"
/**
* @brief Turndata 簡易說明...
*
*/
static TEeData huge EeDataArr[]={
// key // function
{"WEBCAMNAME" , IoWebCamName },
// Logo.html
//{"CONFIG_HTML" , IoConfig }, //marked by jgy 8/19/05
// main.html
{"VIDEO_PLAY" , IoVideo },
{"USER_LOGON" , IoViewUser },
{"AUDIO_" , IoAudio },
{"COOKIE" , IoCookie },
{"UID" , IoUid },
{"WEBCAMID" , IoWid },
{"TRAGET" , IoTrage },
{"IMG_HEIGHT" , IoH },
{"IMG_WIDTH" , IoW },
{"CODEBASE" , IoCODEBASE},
// network.html
{"IP_MODE" , IoIpMode},
{"DHCP_ENABLE" , IoDHCP_ENABLE},
{"IP" , IoIpAddress},
{"MASK" , IoIpAddress},
{"GATEWAY" , IoIpAddress},
{"WWW_PORT" , IoHttpPort},
{"DNS_IP_Address" , IoDns},
{"SoftRst" , IoReset},
{"ADMIN_" , IoUser},
{"USER_" , IoUser},
{"NEW_ADMIN_NAME" , IoUser},
{"NEW_USER_NAME" , IoUser},
{"NEW_ADMIN_PWD" , IoUser},
{"OLD_ADMIN_PWD" , IoUser},
{"OLD_USER_PWD" , IoUser},
{"NEW_USER_PWD" , IoUser},
{"MAC_ADDR" , IoMAC_ADDR},
{"PPPOE_" , IoPPPOE},
//server.html
{"FTP_" , IoFtp},
{"SMTP_" , IoSmtp},
//ddns.html
{"DDNS_" , IoDDNS},
// ImageSet
{"IMG_S" , IoImgSet},
//{"IMG_V_C" , IoVideoCh},
{"IMG_V_C" , IoImgSet},
//---- other
{"WL_" , IoWL},
{"MAC_ADDR" , IoMAC_ADDR},
{"APP_VER" , IoAppVer},
//---- wlan.html
{"WLAN_" , IoWlan},
//--- sntp.html
{"SNTP_" , IoSntp},
//--- storage
{"STORAGE_" , IoStorage},
{"Page" , IoStorage},
{"STImage" , IoStorage},
//--------
//EventTrigger
{"EventT_" , IoEventTrigger},
{"Motion_Det" , IoMDTrigger},
//add by jgy 07/28/05
{"system_" , IoTimer},
//add by jgy 12/01/05
{"IMG_REV" , IoImgReversal}
};
/****************************************************************************/
/* FUNCTION NAME :TuRnData
/* DESCRIPTION :
/* in PARAMETERS :
/* out PARAMETERS:
/* RETURN VALUES :
/* EXAMPLE :
*****************************************************************************/
/**
* @brief
* @param Key-->指向 cgi 變數的指標 不含 $= 字元
*
*/
void TurnData(INT8U *Key, INT8U *Val, INT32U ValSize, INT16U uid)
{
INT32U EeDataArrMum = sizeof(EeDataArr)/sizeof(TEeData);
INT32U i;
INT32U j;
INT32U k = 0;
INT8U *pINT8U;
INT32U Size;
for(i = 0, j = EeDataArrMum; i < EeDataArrMum; i++ )
{
if(! extra_strncmp(EeDataArr[i].Key , Key)) break;
if(! strncmp(EeDataArr[i].Key , Key, strlen(EeDataArr[i].Key)))
{ if( k < strlen(EeDataArr[i].Key))
{
k = strlen(EeDataArr[i].Key);
j = i;
}
}
}
if(i == EeDataArrMum && j == EeDataArrMum)
{
return;
}
if(i == EeDataArrMum) i = j;
pINT8U =(INT8U *) EeDataArr[i].pfun(Key, NULL, IOR , uid);
Size = strlen(pINT8U);
Size = Size > ValSize ? ValSize : Size;
memcpy(Val, pINT8U, Size);
}
/****************************************************************************/
/* FUNCTION NAME :SetData
/* DESCRIPTION :
/* in PARAMETERS :
/* out PARAMETERS:
/* RETURN VALUES :
/* EXAMPLE :
*****************************************************************************/
void SetData(INT8U *Key, INT8U *post, INT32U ValSize, INT16U uid)
{
INT32U EeDataArrMum = sizeof(EeDataArr)/sizeof(TEeData);
INT32U i;
INT32U j;
if(uid != ROOT) return;// only root access
// if(*post == 0x00) return;
for(i = 0, j = EeDataArrMum; i < EeDataArrMum; i++ )
{
if(! extra_strncmp(EeDataArr[i].Key , Key)) break;
if(! strncmp(EeDataArr[i].Key , Key, strlen(EeDataArr[i].Key))) j = i;
}
if(i == EeDataArrMum && j == EeDataArrMum)
{
return;
}
if(i == EeDataArrMum) i = j;
OSTimeDlyHMSM(0,0,0,50);
EeDataArr[i].pfun(Key, post, IOW , uid);
}
#if 1
static const char base64digits[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
#define BAD -1
static const char base64val[] = {
BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,BAD,BAD, BAD,BAD,BAD,BAD,
BAD, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,BAD, BAD,BAD,BAD,BAD,
BAD, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,BAD, BAD,BAD,BAD,BAD
};
#define DECODE64(c) (isascii(c) ? base64val[c] : BAD)
/**
* \brief Raw bytes in quasi-big-endian order to base 64 string (NUL-terminated)
*
* \param[out] out A pointer to a char to hold the converted string
* \param[in] in String to convert
* \param[in] inlen Length of the string to be converted
*/
////void to64frombits(unsigned char *out, const unsigned char *in, int inlen)
void Base64Encode( INT8U huge *out, const INT8U huge *in, INT32U inlen )
{
for (; inlen >= 3; inlen -= 3)
{
*out++ = base64digits[in[0] >> 2];
*out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
*out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
*out++ = base64digits[in[2] & 0x3f];
in += 3;
}
if (inlen > 0)
{
unsigned char fragment;
*out++ = base64digits[in[0] >> 2];
fragment = (in[0] << 4) & 0x30;
if (inlen > 1)
fragment |= in[1] >> 4;
*out++ = base64digits[fragment];
*out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
*out++ = '=';
}
*out = '\0';
}
/****************************************************************************/
/* FUNCTION NAME : Chr2Hex
/* DESCRIPTION :
/* in PARAMETERS :
/*
/* out PARAMETERS:
/* RETURN VALUES :
/*
/*
/* EXAMPLE :
*****************************************************************************/
INT8U Chr2Hex( INT8U n )
{
if ( n >= 0x30 && n <= 0x39 )
{
return n ^ 0x30;
}
else if ( n >= 0x41 && n <= 0x46 )
{
return (n - 0x37);
}
return 0;
}
/****************************************************************************/
/* FUNCTION NAME : Base2Chr
/* DESCRIPTION :
/* in PARAMETERS :
/*
/* out PARAMETERS:
/* RETURN VALUES :
/*
/*
/* EXAMPLE :
*****************************************************************************/
INT8U Base2Chr( INT8U n )
{
n &= 0x3F;
if ( n < 26 )
return ( INT8U )( n + 'A' );
else if ( n < 52 )
return ( INT8U )( n - 26 + 'a' );
else if ( n < 62 )
return ( INT8U )( n - 52 + '0' );
else if ( n == 62 )
return '+';
else
return '/';
}
#else
/****************************************************************************/
/* FUNCTION NAME : Base64Encode
/* DESCRIPTION :
/* in PARAMETERS :
/*
/* out PARAMETERS:
/* RETURN VALUES :
/*
/*
/* EXAMPLE :
*****************************************************************************/
INT32U Base64Encode( INT8U * const huge aDest, INT8U * huge aSrc, INT32U aLen )
{
INT8U huge * p = aDest;
INT32U i;
INT8U t;
for ( i = 0; i < aLen; i++ )
{
switch ( i % 3 )
{
case 0 :
*p++ = Base2Chr( *aSrc >> 2 );
t = ( *aSrc++ << 4 ) & 0x3F;
break;
case 1 :
*p++ = Base2Chr( t | ( *aSrc >> 4 ) );
t = ( *aSrc++ << 2 ) & 0x3F;
break;
case 2 :
*p++ = Base2Chr( t | ( *aSrc >> 6 ) );
*p++ = Base2Chr( *aSrc++ );
break;
}
}
if ( aLen % 3 != 0 )
{
*p++ = Base2Chr( t );
if ( aLen % 3 == 1 )
*p++ = '=';
*p++ = '=';
}
*p = 0; // aDest is an ASCIIZ string
return ( p - aDest ); // exclude the end of zero
}
/*
INT32U Base64Encode( INT8U * const aDest, const INT8U * aSrc, INT32U aLen )
{
INT8U * p = aDest;
INT32U i;
INT8U t;
for ( i = 0; i < aLen; i++ )
{
switch ( i % 3 )
{
case 0 :
*p++ = Base2Chr( *aSrc >> 2 );
t = ( *aSrc++ << 4 ) & 0x3F;
break;
case 1 :
*p++ = Base2Chr( t | ( *aSrc >> 4 ) );
t = ( *aSrc++ << 2 ) & 0x3F;
break;
case 2 :
*p++ = Base2Chr( t | ( *aSrc >> 6 ) );
*p++ = Base2Chr( *aSrc++ );
break;
}
}
if ( aLen % 3 != 0 )
{
*p++ = Base2Chr( t );
if ( aLen % 3 == 1 )
*p++ = '=';
*p++ = '=';
}
*p = 0; // aDest is an ASCIIZ string
return ( p - aDest ); // exclude the end of zero
}
*/
#endif