www.pudn.com > Net_apps.rar > HttpEvent.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     : HttpEvent.c 
// Description  : 
// Reversion    : 0.1 ,Date : 2004/04/06 ,Author  : gofly 
//                Comment : first implementation 
// 
//************************************************************* 
 
#include "..\include\L3\net_apps\httpd\api\HttpEvent.h" 
#include "..\include\L3\net_apps\dns\dns.h" 
#include "..\include\L3\net_apps\ftp\ftp.h" 
#include "..\include\L3\net_apps\smtp\smtp.h" 
#include "..\include\L3\net_apps\ddns\ddns.h" 
#include "..\include\L2\system\24c08.h" 
#include "..\include\L2\system\reset.h" 
//#include "..\include\L2\system\motor.h" 
#include "..\include\L3\net_apps\httpd\api\HttpFileSystem.h" 
#include "..\include\L3\ucos\blocks\serial_rc.h"          //add by jgy 06/21/05 
 
void *motorset(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize); 
static enum {PREFIX=0, INSTRUCTION=1, DATA1=2, DATA2=3, CHECKSUM=4}; 
 
  //-----  only root 
static  TEvent   Event[]={ 
    {"TestRequest"              ,                    TestRequest }, 
    {"DnsRequest"               ,                     DnsRequest }, 
    {"FtpRequest"               ,                     FtpRequest }, 
    {"SmtpRequest"              ,                    SmtpRequest }, 
    {"DdnsRequest"              ,                    DdnsRequest }, 
    {"ReBootRequest"            ,                  ReBootRequest }, 
    {"FWUDReBoot"               ,                     FWUDReBoot }, 
    {"DelImage"                 ,                       DelImage }, 
    {"MOTOR"                    ,                       motorset }, 
 
}; 
 
/****************************************************************************/ 
/* FUNCTION NAME : HttpSolEvent 
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void HttpSolEvent(INT8U *Key, INT8U *Val, INT32U ValSize, INT16U uid) 
{ 
    INT32U   EventArrMum      =    sizeof(Event)/sizeof(TEvent); 
    INT32U   i; 
    INT8U   *pINT8U; 
    INT32U   Size; 
 
    if(uid != ROOT) 
    { 
        strcpy(Val, "HTTP You don't have permission to access EVENT!!"); 
        return; 
 
    } 
 
    for(i = 0; i < EventArrMum; i++ ) 
    {     // /EVENT?  len = 7 
        if(! strncmp(Event[i].Key , Key+7, strlen(Event[i].Key))) break; 
    } 
 
    if(i == EventArrMum ) 
    { 
        strcpy(Val, "Event not found!!"); 
        return; 
    } 
 
    Event[i].pfun(Event[i].Key, Key+7, 0 , uid, Val, ValSize); 
 
    //pINT8U  =(INT8U *) Event[i].pfun(Event[i].Key, Key+7, 0 , uid); 
    /* 
    Size   =  strlen(pINT8U); 
    Size   =  Size >  ValSize  ? ValSize : Size; 
    memcpy(Val, pINT8U, Size); 
    Val[Size] = 0x00; 
    */ 
} 
//*********************************************** 
// DnsRequest() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
//--- how to test 
// http://192.168.1.81/EVENT?DnsRequest=ns2.fp.sandpiper.net 
void *DnsRequest(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{  //      data =   DnsRequest=....... 
 
    INT8U               Fqdn[64]; 
    INT8U               ip[4]; 
    INT32U             *pIpaddressStr; 
 
    memcpy(Fqdn, data + 1 + strlen(Key), sizeof(Fqdn)); 
    *(Fqdn + strcspn((const char*)Fqdn, (const char*)"\x26\x20\x00\x0a")) = 0x00; 
 
 
   switch(dns_table(0, Fqdn , ip, DNS_LOOK_UP)) 
   { 
     case R_ER: sprintf(Val,"HTTP DNS request %s not join dnstable\x00", Fqdn);  break; 
     case R_RU: sprintf(Val,"HTTP DNS request %s Running\x00", Fqdn);            break; 
     case R_OK: 
        pIpaddressStr = ip; 
        sprintf(Val," OK %s <= %s\x00",inet_ntoa(*pIpaddressStr), Fqdn);         break; 
 
   } 
 
 
} 
 
//*********************************************** 
// FtpRequest() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *FtpRequest(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{  //      data =   DnsRequest=....... 
 
    JPG_BUF             jpg_buf; 
    INT16U Width   = atoi(IoW(NULL, NULL, IOR, ROOT)); 
    INT16U Height  = atoi(IoH(NULL, NULL, IOR, ROOT)); 
    INT16U   Qual  = atoi(IoImgSet("IMG_S_GET_C", NULL, IOR, ROOT)); 
 
    jpg_buf.jpg_imag_width    =   Width; 
    jpg_buf.jpg_imag_height   =   Height; 
    jpg_buf.jpg_qual          =   Qual; 
    jpg_buf.jpg_shp_smooth    =   0;      //disable shp & smooth 
    jpg_buf.jpg_wait_msec     =   0;      //always wait image get 
   #if FTP_OPEN 
    video_image_get((void*)&jpg_buf); 
    //video_image_lock((void*)&jpg_buf); 
    FtpApi(Val,&jpg_buf); 
    video_image_free((void*)&jpg_buf); 
//   FtpApi (Msg,LogoImage + 56, sizeof(LogoImage) - 56); 
//   FtpApi (Msg,demojpg + 58, sizeof(demojpg) - 58); 
   #endif 
 
} 
 
//*********************************************** 
// SmtpRequest() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *SmtpRequest(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{  //      data =   DnsRequest=....... 
 
    JPG_BUF             jpg_buf; 
    INT16U Width   = atoi(IoW(NULL, NULL, IOR, ROOT)); 
    INT16U Height  = atoi(IoH(NULL, NULL, IOR, ROOT)); 
    INT16U   Qual  = atoi(IoImgSet("IMG_S_GET_C", NULL, IOR, ROOT)); 
 
    jpg_buf.jpg_imag_width    =   Width; 
    jpg_buf.jpg_imag_height   =   Height; 
    jpg_buf.jpg_qual          =   Qual; 
    jpg_buf.jpg_shp_smooth    =   0;      //disable shp & smooth 
    jpg_buf.jpg_wait_msec     =   0;      //always wait image get 
 
    #if SMTP_OPEN 
 
    video_image_get((void*)&jpg_buf); 
    //video_image_lock((void*)&jpg_buf); 
    SmtpApi (Val,&jpg_buf); 
    video_image_free((void*)&jpg_buf); 
 
 
    //SmtpApi (Msg,LogoImage + 56, sizeof(LogoImage) - 56); 
    //SmtpApi (Msg,demojpg + 58, sizeof(demojpg) - 58); 
    #endif 
 
} 
//*********************************************** 
// DdnsRequest() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *DdnsRequest(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{ 
 
   #if DDNS_OPEN 
   DdnsApi (Val,NULL, 0); 
   #endif 
 
} 
//*********************************************** 
// FWUDReBoot() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *FWUDReBoot(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{ 
 
 
   if(firware_packet_success(0, IOR) == 0)// get flag) 
   { 
        if(Val != NULL) 
            sprintf(Val,"FWUDReBoot fail!!!\x00"); 
   } 
   else 
   { 
        if(Val != NULL) 
            sprintf(Val,"FWUDReBoot Ok!!!\x00"); 
        if (update_start() != TRUE ) 
        { 
            clrbw(IMASK, IMASK_TMR); 
            sprintf(Val,"FWUDReBoot fail!!!\x00"); 
            return ; 
        } 
        else 
        { 
        reset(FIRMWARE); 
        } 
   } 
 
   
} 
//*********************************************** 
// FWUDReBoot() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *ReBootRequest(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{ 
   reset(SYSTEM); 
 
} 
 
//*********************************************** 
// TestRequest() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *TestRequest(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{ 
 
   int  i = 0; 
   for( i = 0; i < 3 ; i++) 
       motion_det_set(i, 10, 100+i*5, 100+i*5, 200+i*5, 200+i*5) ; 
 
 
 
   strcpy(Val,"Ok"); 
} 
 
//*********************************************** 
// DelImage() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *DelImage(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{ 
  //--- 在事件加入 del image 事件 
 
   IoStorage("HTML_NEXT", NULL, IOW, ROOT); 
   StorageDeleteFile((char *)data + 9); 
   IoStorage("HTML_INDEX", NULL, IOW, ROOT); 
   HttpCgi(Val, "", ShowImageHtml, ROOT); 
 
} 
 
//*********************************************** 
// MotorSet() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void *motorset(INT8U *Key, INT8U *data, INT8U op, INT16U uid, INT8U* Val, INT32U ValSize) 
{ 
    INT16U  i; 
    INT8U inst_packet[5];                 //A5H + instrucion + data1 + data2 + checksum 
 
    memset(inst_packet, 0, sizeof(inst_packet)); 
    inst_packet[PREFIX] = 0x0a5;     //prefix 
    //The 8 char is "MOTOR" 
    if(!strncmp("=stop", (data + 5), 5)) 
    { 
        //motor_ctrl.motor_mode        = MOTOR_STOP; 
        //motor_ctrl.motor_ud_location = motor_ctrl.motor_rl_traget; 
        //motor_ctrl.motor_ud_location = motor_ctrl.motor_ud_traget; 
        //MOTOR_CTRL_STOP_ALL(); 
        //do nothing 
    } 
    else if(!strncmp("=right", (data + 5), 6)) 
    { 
        //motor_move_angle(2, 0, 150); 
        inst_packet[INSTRUCTION] = 0x01;           //00000001 
    } 
    else if(!strncmp("=left", (data + 5), 5)) 
    { 
        //motor_move_angle(-2, 0, 150); 
        inst_packet[INSTRUCTION] = 0x02;           //00000010 
    } 
    else if(!strncmp("=up", (data + 5), 3)) 
    { 
        //motor_move_angle(0, -2, 150); 
        inst_packet[INSTRUCTION] = 0x08;           //00001000 
    } 
    else if(!strncmp("=down", (data + 5), 5)) 
    { 
        //motor_move_angle(0, 2, 150); 
        inst_packet[INSTRUCTION] = 0x04;           //00000100 
    } 
    //else if(!strncmp("=rl_search", (data + 5), 10)) 
    //{ 
    //    motor_search_rl(5, -5, 150); 
    //} 
    else if(!strncmp("=zoomin", (data + 5), 7)) 
    { 
        inst_packet[INSTRUCTION] = 0x41;          //01000001 
    } 
    else if(!strncmp("=zoomout", (data + 5), 8)) 
    { 
        inst_packet[INSTRUCTION] = 0x42;          //01000010 
    } 
    else if(!strncmp("=focusnear", (data + 5), 10)) 
    { 
        inst_packet[INSTRUCTION] = 0x48;          //01001000 
    } 
    else if(!strncmp("=focusfar", (data + 5), 9)) 
    { 
        inst_packet[INSTRUCTION] = 0x44;          //01000100 
    } 
    else if(!strncmp("=irisclose", (data + 5), 10)) 
    { 
        inst_packet[INSTRUCTION] = 0x60;          //01100000 
    } 
    else if(!strncmp("=irisopen", (data + 5), 9)) 
    { 
        inst_packet[INSTRUCTION] = 0x50;          //01010000 
    } 
    else if(!strncmp("=pan", (data + 5), 4)) 
    { 
        inst_packet[INSTRUCTION] = 0x02;     //left 
        inst_packet[DATA1] = 0x01; 
    } 
    else if(!strncmp("=tilt", (data + 5), 5)) 
    { 
        inst_packet[INSTRUCTION] = 0x08;     //up 
        inst_packet[DATA2] = 0x01; 
    } 
    else if(!strncmp("=null", (data + 5), 5)) 
    { 
        inst_packet[PREFIX] = (INT8U)0;      //nop 
    } 
    else 
    { 
        strcpy(Val, "ERROR!!"); 
        return; 
    } 
    if(inst_packet[PREFIX] != 0) 
    { 
        inst_packet[CHECKSUM] = inst_packet[PREFIX] + inst_packet[INSTRUCTION] + \ 
                                inst_packet[DATA1] + inst_packet[DATA2];   //calc checksum 
        for(i = 0; i < 5; i++) 
        { 
            CommPutChar(COMM1, inst_packet[i], 0); 
        } 
    } 
    strcpy(Val, "OK!!"); 
 
    return; 
}