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;
}