📄 loginreply.c
字号:
/*************************************************************PROJECT CODE: COMMAND RESOLUTION **CREAT DATE : 2006-12-19 **CREAT BY : LiHui **FUNCTION : RESOLUTE THE COMMAND FROM REMOTE PC **MODIFY DATE : **DOCUMENT : NO **OTHERS : NO **OS : LINUX *************************************************************//*The code of LoginReply.c*/#include <sys/mman.h>#include <sys/types.h>#include <sys/socket.h>#include <linux/fs.h> #include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h> #include <errno.h>#include <stdlib.h> #include <string.h>#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>#include <netdb.h>#include <fcntl.h>#include <sys/stat.h>#include <time.h>#include "CommandResolution.h"#include "LoginReply.h"//响应用户登入登出命令#include "Interception.h"//监听操作头文件#include "BrowseReplay.h"//查询重放命令解析头文件#include "ArchiveThread.h"//备份数据线程头文件#include "fs.h"//与硬盘操作相关的函数#include "mpi.h"#include "q21.h"#include "dsp.h"/*登入检查函数*/int LoginReply(char *msgBuffer, int msglen){ User_Information UserInfo; unsigned char UserNameLen; unsigned char PasswordLen; int retval = -2; if(Collecter_Inf.LoginPC_num < MAX_LOGIN_NUM) { UserNameLen = (unsigned char)msgBuffer[6]*256 + (unsigned char)msgBuffer[5]; PasswordLen = (unsigned char)msgBuffer[9 + UserNameLen]*256 +(unsigned char)msgBuffer[8 + UserNameLen]; memset(&UserInfo, 0, sizeof(User_Information)); memcpy(UserInfo.UserName, msgBuffer + 7, UserNameLen); memcpy(UserInfo.Password, msgBuffer + 10 + UserNameLen, PasswordLen); retval = UserInfoCheck(&UserInfo); if(retval = 0) {//登入成功 memcpy(&Collecter_Inf.LoginPC[Collecter_Inf.LoginPC_num].ServerIP, &addr_from, sizeof(struct sockaddr_in)); memcpy(Collecter_Inf.LoginPC[Collecter_Inf.LoginPC_num].UserPowerCH, UserInfo.UserPowerCH, MAX_CHANNEL_NUM); Collecter_Inf.LoginPC[Collecter_Inf.LoginPC_num].UserPowerOP = UserInfo.UserPowerOP; Collecter_Inf.LoginPC_num ++; msgBuffer[3] = 'A'; msgBuffer[4] = 0x00;//登录成功 msgBuffer[5] = 0xff; sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) ); return 0; } else {//登入失败 msgBuffer[3] = 'A'; msgBuffer[4] = 0x01;//登录失败 msgBuffer[5] = 0xff; sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) ); return -1; } } else {//登入失败 msgBuffer[3] = 'A'; msgBuffer[4] = 0x01;//登录失败 msgBuffer[5] = 0xff; sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) ); return -1; }}/*检查用户信息,包括用户名和密码。返回值 -1表示用户名或密码不正确,登入失败*/int UserInfoCheck(User_Information *UserInfo){ struct s_iniinfo s_Ini_Info;//读取USERINFO.INI文件时调用 char userinfo_buff[512*1024];//USERINFO.INI文件缓冲区 unsigned long userinfo_len; //USERINFO.INI文件长度 User_Information UserInfo_temp; unsigned char UserinfoSize; unsigned char usernum;//USERINFO.INI文件中的用户数量 unsigned char index; char *UserInfo_Head = "[USERINFO]"; char *pAddr; s_Ini_Info.num = USERINFO_INI; userinfo_len = read_ini(&s_Ini_Info, userinfo_buff);//读取USERINFO.INI文件 pAddr = strstr(userinfo_buff, UserInfo_Head);//找出[USERINFO]字段 pAddr += 10; usernum = *pAddr;//查找注册用户数目 pAddr++; UserinfoSize = (unsigned char)sizeof(User_Information); for(index = 0; index < usernum; index ++) { memset(&UserInfo_temp, 0, UserinfoSize); memcpy(&UserInfo_temp, pAddr + index*UserinfoSize, UserinfoSize); if(!(strcmp(UserInfo_temp.UserName, UserInfo->UserName) || strcmp(UserInfo_temp.Password, UserInfo->Password)))//用户名和密码正确,允许登入 { *UserInfo = UserInfo_temp; return 0;//用户登录成功 } } return -1;//用户登录失败}/*退出检查函数*/int LogoutReply(char *msgBuffer, int msglen, int loginIndex){ int index; for(index = loginIndex; index < Collecter_Inf.LoginPC_num; index++ )//将该PC的IP从IP列表中删除,并且登录的PC机个数减1 Collecter_Inf.LoginPC[index].ServerIP= Collecter_Inf.LoginPC[index+1].ServerIP; Collecter_Inf.LoginPC_num --; msgBuffer[3] = 'A' ; msgBuffer[4] = 0x00;//退出成功 msgBuffer[5] = 0xff; sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) ); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -