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