?? common.h
字號:
#ifndef __COMMON_H#define __COMMON_H#include <sys/socket.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <signal.h>#include <netdb.h>#include <linux/sockios.h>#include <sys/ioctl.h>#include <linux/if.h>#include <dirent.h>#include <sys/stat.h>#include <pwd.h>#include <grp.h>#include <time.h>#include <string.h>#include <pthread.h>#define TELNET_LENGTH 512#define LISTEN_PORT 2379int one (const struct dirent *unused){ return 1;}void parse_parameters(char *cmd, int pn, char *out){ out[0] = '\0'; int space_begin,space_num,param_end; space_num = 0; for( space_begin = 0; space_begin < strlen(cmd); space_begin++) { if(cmd[space_begin] == ' ' && cmd[space_begin+1]!= '-') space_num ++; if(space_num == pn) { param_end = space_begin+1; while(cmd[param_end]!=' ' && cmd[param_end]!='\r' && cmd[param_end]!= '\0') param_end++; strncpy(out,cmd+space_begin+1,param_end-1-space_begin); out[param_end-1-space_begin]='\0'; return; } }}void check_error(int handle, char *message){ if (handle<0) { if (message!=NULL) perror(message); exit(EXIT_FAILURE); }}void send_telnt(char* buff, int len, int dsock){ buff[len++] = '\r'; buff[len++] = '\n'; int h = 0; do { h = send(dsock, buff, len, 0); check_error(h, "send"); len -= h; buff += h; }while (len>0);}void send_command(char *buff, int dsock){ printf("\033[1;33m%s\033[m\n", buff); send_telnt(buff, strlen(buff), dsock);}void send_data(char *buff, int len, int dtsock){ int h = 0; do { h = send(dtsock, buff, len, 0); check_error(h, "send data"); len -= h; buff += h; }while (len>0);}void receive_data(int dtsock){ int h = 0; char buff[TELNET_LENGTH]; while ((h=recv(dtsock, buff, TELNET_LENGTH, 0))>0) { buff[h] = '\0'; printf("%s", buff); }} void send_file(FILE *fl, int dtsock){ int h; int i; char buff[TELNET_LENGTH]; while ( (h=fread(buff, 1, TELNET_LENGTH, fl))>0 ) { send_data(buff,h,dtsock); }}void receive_file(FILE *fl, int dtsock){ int h; char buff[TELNET_LENGTH]; int total = 0; while ( (h=recv(dtsock, buff, TELNET_LENGTH, 0)) > 0) { fwrite(buff, 1, h, fl); total += h; } printf("[Fancy FTP]Receive %d bytes\n", total);}char default_string[][512] = { "220 Fancy FTP Server Ready...", "250 pathname created.", "221 Goodbye!", "500 Syntax error.", "226 Close data connection.", "331 User name okay, need password.", "230-\r\nUser logged in, proceed.\r\n************************\r\nWelcome to Fancy's ftpd!!!\r\n**********************\r\n230 fancy9:)", "530 Not logged in.", "200 Command okay.", "502 Comand not Supported.", "215 UNIX Type: L8", "227 Enter Passive Mode.", "150 Opening ASCII mode data connection.", "214 HELP", "DUMMY"};enum reply_num{ R220, R250, R221, R500, R226, R331, R230, R530, R200, R502, R215, R227, R150, R214, R999};void reply(enum reply_num num, char *message, int dsock){ char buff[256]; int len; if (message==NULL) { len = strlen(default_string[num]); strcpy(buff, default_string[num]); } else { strcpy(buff, message); len = strlen(message); } send_telnt(buff,len,dsock);}int receive_command(char *buff, int maxlen, int dsock){ char *p = buff; int l = 0, rl; while ((rl = recv(dsock, p, maxlen - l, 0))>0) { if (rl==0) break; while (rl>0 && ((*p)!='\r' || (*(p+1))!='\n')) { l ++; p ++; rl --; } if (rl>0) break; } *(p+2) = '\0'; return l+2;}int deal_rpl_buff(char temp[256][TELNET_LENGTH], int maxlen, int dsock){ int templen = 0; int rl; int flag = 0; int islong = 0; int r; int sign; char p[TELNET_LENGTH]; char * begin; char * end; do { check_error(255-templen, "reply too much"); rl = recv(dsock, p, maxlen, 0); begin =p; end = p; //printf("======%s\n",begin); do { while((end -p < rl -1 ) && !((*end) == '\r' && (*(end+1)) == '\n' )) { end ++; } if(!flag) { strncpy(temp[templen],begin,end - begin +2); temp[templen][end-begin+3] = '\0'; //printf("---------%s\n",temp[templen]); templen++; } else { flag = 0; int len = strlen(temp[templen -1]); strncat(temp[templen - 1],begin,end - begin +2); temp[templen -1][len + end - begin + 3] = '\0'; //printf("+++++++++++++%s\n",temp[templen - 1]); } begin = end + 2; end = begin; } while(end - p < rl); if((rl == TELNET_LENGTH)&&!( p[TELNET_LENGTH-1] == '\n'&& p[TELNET_LENGTH-2] == '\r' )) flag = 1; else flag = 0; if ( temp[0][3]=='-') { r = (temp[0][0]-'0')*100 + (temp[0][1]-'0')*10 + (temp[0][2]-'0'); islong = 1; } sign = (temp[templen -1][0]-'0')*100+(temp[templen -1][1]-'0')*10+(temp[templen -1][2]-'0'); //printf("rrrrrrrrrrrrr%d\n",(temp[templen -1][0]-'0')*100+(temp[templen -1][1]-'0')*10+(temp[templen -1][2]-'0')); } while(flag || ( islong && ( templen == 1 || (sign !=r) ) ) ); return templen;}int receive_reply(char *buff, int maxlen, int dsock){ int r; int flag = 0; char temp[256][TELNET_LENGTH] = {"\0"}; int templen = deal_rpl_buff(temp, maxlen, dsock); int i; // printf("============%d\n",templen); for(i = 0; i < templen; i++) { printf("\033[1;34m%s\033[m", temp[i]); } strcpy(buff, temp[0]); // do //{ // receive_command(temp, maxlen, dsock); // printf("\033[1;34m%s\033[m", buff); // if (!flag && buff[3]=='-') //{ // flag = 1; // r = (buff[0]-'0')*100 + (buff[1]-'0')*10 + (buff[2]-'0'); //} // }while (flag && (buff[3]=='-' || ( (buff[0]-'0')*100+(buff[1]-'0')*10+(buff[2]-'0')!=r) )); return 0;}void permission(unsigned int mode, char *buff){ strcpy(buff,"----------"); buff[0] = S_ISDIR(mode)?'d':'-'; buff[1] = (mode&S_IRUSR)==S_IRUSR?'r':'-'; buff[2] = (mode&S_IWUSR)==S_IWUSR?'w':'-'; buff[3] = (mode&S_IXUSR)==S_IXUSR?'x':'-'; buff[4] = (mode&S_IRGRP)==S_IRGRP?'r':'-'; buff[5] = (mode&S_IWGRP)==S_IWGRP?'w':'-'; buff[6] = (mode&S_IXGRP)==S_IXGRP?'x':'-'; buff[7] = (mode&S_IROTH)==S_IROTH?'r':'-'; buff[8] = (mode&S_IWOTH)==S_IWOTH?'w':'-'; buff[9] = (mode&S_IXOTH)==S_IXOTH?'x':'-';}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -