📄 remot-proxy.c
字号:
#include "remote-proxy.h"/*********************UDP PART*****************************/int create_udp(udp_t *udp,int port){ if((udp->fd= socket(AF_INET,SOCK_DGRAM,0)) < 0) { return -1; } memset(&udp->sin,0,sizeof(udp->sin)); udp->sin.sin_family = AF_INET; udp->sin.sin_addr.s_addr = INADDR_ANY; udp->sin.sin_port = htons(port); if(bind(udp->fd,(struct sockaddr*)&udp->sin,sizeof(struct sockaddr)) < 0) { return -1; } return 0;}void udp_set_receiver_addr(udp_t *udp,char *addr,int port){ bzero(&udp->rin, sizeof(udp->rin)); udp->rin.sin_family = AF_INET; inet_pton(AF_INET, addr, &udp->rin.sin_addr); udp->rin.sin_port = htons(port);}int udp_send(udp_t *udp, char *message,int length){ assert(message !=NULL); return sendto(udp->fd, message, length, 0, (struct sockaddr*)&udp->rin, sizeof(struct sockaddr));}int udp_recv(udp_t *udp, char *message){ assert(message != NULL); int sin_size = sizeof(struct sockaddr_in); memset(message,0,MAX_MSG_LENGTH); return recvfrom(udp->fd, message, MAX_MSG_LENGTH, 0, (struct sockaddr*)&udp->rin, &sin_size);}char *udp_get_sender_addr(udp_t *udp){ return inet_ntoa(udp->rin.sin_addr);}int udp_close(udp_t *udp){ if(udp->fd) return close(udp->fd); return 0;}/*************************TCP/IP PART************************/int create_tcp_ip(tcp_ip_t *tcp_ip,char *remote_ip,int remote_port){ if ((tcp_ip->he=gethostbyname(remote_ip)) == NULL) { return -1; } if ((tcp_ip->fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { return -1; } tcp_ip->remote_addr.sin_family = AF_INET; tcp_ip->remote_addr.sin_port = htons(remote_port); tcp_ip->remote_addr.sin_addr = *((struct in_addr *)tcp_ip->he->h_addr); memset(&(tcp_ip->remote_addr.sin_zero), '\0', 8); if (connect(tcp_ip->fd, (struct sockaddr *)&tcp_ip->remote_addr, sizeof(struct sockaddr)) <0) { return -1; } return 0;}int tcp_ip_send(tcp_ip_t *tcp_ip, char *message){ return(write(tcp_ip->fd,message,strlen(message)));}int tcp_ip_recv(tcp_ip_t *tcp_ip, char *message){ return(read(tcp_ip->fd, message, MAX_MSG_LENGTH));}/**************************SERIAL PORT PART*******************/int create_serial_port(serial_port_t *hcom, char *dev,int speed, int databits, int stopbits, int parity){ hcom->dev_name = (char *)malloc(strlen(dev) * sizeof(char)); memcpy(hcom->dev_name, dev, strlen(dev)); hcom->speed = speed; hcom->databits = databits; hcom->stopbits = stopbits; hcom->parity = parity; if( ( hcom->fd = open(dev,O_RDWR|O_NDELAY) ) < 0) return -1; if (set_serial_port_speed(hcom) < 0) return -1; if (set_serial_port_parity(hcom)<0) return -1; return 0;}int set_serial_port_speed(serial_port_t *hcom){ struct termios opt; tcgetattr(hcom->fd, &opt); tcflush(hcom->fd, TCIOFLUSH); cfsetispeed(&opt, hcom->speed); cfsetospeed(&opt, hcom->speed); if(tcsetattr(hcom->fd, TCSANOW, &opt)<0) return -1; return 0;}/**************************************************************************** * Function: * Input: * Output: * *************************************************************************/int set_serial_port_parity(serial_port_t *hcom){ struct termios options; if (tcgetattr(hcom->fd, &options) < 0) return -1; options.c_cflag &= ~CSIZE; switch (hcom->databits) { case 7: options.c_cflag |= CS7; break; case 8: options.c_cflag |= CS8; break; default: return -1; } switch (hcom->parity) { case 'n': case 'N': options.c_cflag &= ~PARENB; options.c_iflag &= ~INPCK; break; case 'o': case 'O': options.c_cflag |= (PARODD | PARENB); options.c_iflag |= INPCK; break; case 'e': case 'E': options.c_cflag |= PARENB; options.c_cflag &= ~PARODD; options.c_iflag |= INPCK; break; case 'S': case 's': options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; break; default: return -1; } switch (hcom->stopbits) { case 1: options.c_cflag &= ~CSTOPB; break; case 2: options.c_cflag |= CSTOPB; break; default: return -1; } /* Set input parity option */ if (hcom->parity != 'n') options.c_iflag |= INPCK; options.c_cc[VTIME] = 150; // 15 seconds options.c_cc[VMIN] = 0; tcflush(hcom->fd,TCIFLUSH); /* Update the options and do it NOW */ if (tcsetattr(hcom->fd,TCSANOW,&options) != 0) return -1; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -