Commit 17e2d1fb authored by chenhaowen's avatar chenhaowen

add luci app, remove dependent of openssl

parent de457698
...@@ -5,7 +5,7 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) ...@@ -5,7 +5,7 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_NAME:=gdut-drcom PKG_NAME:=gdut-drcom
# Version: 1.0-1 # Version: 1.0-1
PKG_VERSION:=1.4 PKG_VERSION:=1.5
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_MAINTAINER:=CHW PKG_MAINTAINER:=CHW
# PKG_SOURCE_URL:= # PKG_SOURCE_URL:=
...@@ -15,7 +15,8 @@ define Package/gdut-drcom ...@@ -15,7 +15,8 @@ define Package/gdut-drcom
DEFAULT:=y DEFAULT:=y
TITLE:=xdh3c -- a h3c client for linux TITLE:=xdh3c -- a h3c client for linux
# DEPENDS:=+libgcrypt # DEPENDS:=+libgcrypt
DEPENDS:=+libopenssl # DEPENDS:=+libopenssl
# DEPENDS:=+libpolarssl
endef endef
define Build/Prepare define Build/Prepare
@echo "############## Build/Prepare" @echo "############## Build/Prepare"
...@@ -25,7 +26,8 @@ endef ...@@ -25,7 +26,8 @@ endef
define Build/Compile define Build/Compile
@echo "############## Build/Compile" @echo "############## Build/Compile"
export CFLAGS="$CFLAGS -DDEBUG" export CFLAGS="$CFLAGS -DDEBUG"
$(call Build/Compile/Default, cryptlib=openssl) # $(call Build/Compile/Default, cryptlib=openssl)
$(call Build/Compile/Default)
endef endef
define Package/gdut-drcom/postinst define Package/gdut-drcom/postinst
#!/bin/sh #!/bin/sh
...@@ -44,9 +46,17 @@ define Package/gdut-drcom/install ...@@ -44,9 +46,17 @@ define Package/gdut-drcom/install
$(INSTALL_DIR) $(1)/usr/bin $(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/gdut-drcom $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/gdut-drcom $(1)/usr/bin
$(INSTALL_DIR) $(1)/etc $(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) $(PKG_BUILD_DIR)/etc/gdut-drcom.conf $(1)/etc $(INSTALL_DATA) $(PKG_BUILD_DIR)/root/etc/gdut-drcom.conf $(1)/etc
$(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/etc/init.d/gdut-drcom $(1)/etc/init.d $(INSTALL_BIN) $(PKG_BUILD_DIR)/root/etc/init.d/gdut-drcom $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) $(PKG_BUILD_DIR)/root/etc/config/gdut_drcom $(1)/etc/config
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller
$(INSTALL_DATA) $(PKG_BUILD_DIR)/root/usr/lib/lua/luci/controller/gdut-drcom.lua $(1)/usr/lib/lua/luci/controller
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi
$(INSTALL_DATA) $(PKG_BUILD_DIR)/root/usr/lib/lua/luci/model/cbi/gdut-drcom.lua $(1)/usr/lib/lua/luci/model/cbi
endef endef
$(eval $(call BuildPackage,gdut-drcom)) $(eval $(call BuildPackage,gdut-drcom))
#CC:=gcc #CC:=gcc
CFLAGS+=-DDEBUG CFLAGS+=-DDEBUG
#cryptlib=openssl
#ifeq ($(lib), openssl) objects=gdut-drcom.o config.o auth.o
# CFLAGS+=-D_WITH_OPENSSL_
# LIBS:=-lcrypto all: gdut-drcom
#else @echo gdut-drcom
# LIBS:=-lpolarssl
#endif
ifeq ($(cryptlib), polarssl) ifeq ($(cryptlib), polarssl)
CFLAGS+=-D__WITH_POLARSSL__ CFLAGS+=-D__WITH_POLARSSL__
LIBS:=-lpolarssl LIBS:=-lpolarssl
else ifeq ($(cryptlib), gcrypt) else ifeq ($(cryptlib), gcrypt)
CFLAGS+=-D__WITH_GCRYPT__ CFLAGS+=-D__WITH_GCRYPT__
LIBS:=-lgcrypt LIBS:=-lgcrypt
else ifeq ($(cryptlib), openssl)
CFLAGS+=-D__WITH_OPENSSL__
LIBS:=-lcrypto
else else
LIBS:=-lcrypto objects+= md5.o md4.o sha1.o
endif endif
gdut-drcom: $(objects)
all: gdut-drcom $(CC) *.o -o gdut-drcom $(CFLAGS) $(LIBS)
@echo gdut-drcom
gdut-drcom: gdut-drcom.o config.o auth.o
$(CC) gdut-drcom.o config.o auth.o -o gdut-drcom $(CFLAGS) $(LIBS)
gdut-drcom.o: gdut-drcom.c gdut-drcom.o: gdut-drcom.c
$(CC) $(CFLAGS) -c $< $(CC) $(CFLAGS) -c $<
...@@ -32,6 +30,9 @@ config.o: config.c config.h ...@@ -32,6 +30,9 @@ config.o: config.c config.h
auth.o: auth.c config.h auth.o: auth.c config.h
$(CC) $(CFLAGS) -c $< $(CC) $(CFLAGS) -c $<
md5.o md4.o sha1.o:
$(CC) -c crypt/*.c
.PHONY : clean
clean: clean:
rm -f gdut-drcom *.o rm -f gdut-drcom *.o
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#define _MD5(data, len, _md5) gcry_md_hash_buffer(GCRY_MD_MD5, _md5, data, len) #define _MD5(data, len, _md5) gcry_md_hash_buffer(GCRY_MD_MD5, _md5, data, len)
#define _MD4(data, len, _md4) gcry_md_hash_buffer(GCRY_MD_MD4, _md4, data, len) #define _MD4(data, len, _md4) gcry_md_hash_buffer(GCRY_MD_MD4, _md4, data, len)
#define _SHA1(data, len, _sha1) gcry_md_hash_buffer(GCRY_MD_SHA1, _sha1, data, len) #define _SHA1(data, len, _sha1) gcry_md_hash_buffer(GCRY_MD_SHA1, _sha1, data, len)
#else #elif __WITH_OPENSSL__
#include <openssl/md5.h> #include <openssl/md5.h>
#include <openssl/md4.h> #include <openssl/md4.h>
#include <openssl/sha.h> #include <openssl/sha.h>
...@@ -48,6 +48,14 @@ ...@@ -48,6 +48,14 @@
#define _MD5(data, len, _md5) MD5(data, len, _md5) #define _MD5(data, len, _md5) MD5(data, len, _md5)
#define _MD4(data, len, _md4) MD4(data, len, _md4) #define _MD4(data, len, _md4) MD4(data, len, _md4)
#define _SHA1(data, len, _sha1) SHA1(data, len, _sha1) #define _SHA1(data, len, _sha1) SHA1(data, len, _sha1)
#else
#include "crypt/md5.h"
#include "crypt/md4.h"
#include "crypt/sha1.h"
#define _MD5(data, len, _md5) md5(data, len, _md5)
#define _MD4(data, len, _md4) md4(data, len, _md4)
#define _SHA1(data, len, _sha1) sha1(data, len, _sha1)
#endif #endif
#include "config.h" #include "config.h"
...@@ -61,7 +69,7 @@ static int make_keep_alive2_pkt1(char *buf, unsigned char cnt, char *flag,\ ...@@ -61,7 +69,7 @@ static int make_keep_alive2_pkt1(char *buf, unsigned char cnt, char *flag,\
static int make_keep_alive2_pkt2(char *buf, unsigned char cnt, char *flag,\ static int make_keep_alive2_pkt2(char *buf, unsigned char cnt, char *flag,\
char *rand, char *key, char *host_ip); char *rand, char *key, char *host_ip);
static int gen_ka1_checksum(char *checksum, char *seed, unsigned char mode); static void gen_ka1_checksum(char *checksum, char *seed, unsigned char mode);
static void gen_ka2_checksum(char *data, int len, char *checksum); static void gen_ka2_checksum(char *data, int len, char *checksum);
static int32_t drcomCRC32(char *data, int len); static int32_t drcomCRC32(char *data, int len);
...@@ -72,7 +80,7 @@ static void print_as_hex(char *buf, int len); ...@@ -72,7 +80,7 @@ static void print_as_hex(char *buf, int len);
int auth(void) int auth(void)
{ {
/*variavles of packets*/ /*variavles of packets*/
unsigned char buf[1024] = {0}; //packet data buf unsigned char pkt_data[1024] = {0}; //packet data buf
int length; //packet data length int length; //packet data length
/*variavles of packets*/ /*variavles of packets*/
...@@ -132,20 +140,20 @@ HEART_BEAT_START: ...@@ -132,20 +140,20 @@ HEART_BEAT_START:
retry_cnt = 1; retry_cnt = 1;
while (1) while (1)
{ {
length = make_keep_alive1_pkt1(buf, kp1_cnt); length = make_keep_alive1_pkt1(pkt_data, kp1_cnt);
sendto(client_sockfd, buf, length, 0,\ sendto(client_sockfd, pkt_data, length, 0,\
(struct sockaddr *) &remote_addr, sizeof(remote_addr)); (struct sockaddr *) &remote_addr, sizeof(remote_addr));
fprintf(stdout, "<==[sended kap1_1 request %d] len = %d\n",\ fprintf(stdout, "<==[sended kap1_1 request %d] len = %d\n",\
kp1_cnt, length); kp1_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf, length); print_as_hex(pkt_data, length);
if (retry_cnt > 5) if (retry_cnt > 5)
{ {
goto HEART_BEAT_START; goto HEART_BEAT_START;
} }
memset(buf, 0x00, 1024); memset(pkt_data, 0x00, 1024);
if ((length = recvfrom(client_sockfd, buf, 1024, 0,\ if ((length = recvfrom(client_sockfd, pkt_data, 1024, 0,\
(struct sockaddr *) &remote_addr, &sin_size)) == -1) (struct sockaddr *) &remote_addr, &sin_size)) == -1)
{ {
fprintf(stdout, "recv kap1_1 timeout, retry %d!\n", retry_cnt++); fprintf(stdout, "recv kap1_1 timeout, retry %d!\n", retry_cnt++);
...@@ -160,29 +168,29 @@ HEART_BEAT_START: ...@@ -160,29 +168,29 @@ HEART_BEAT_START:
fprintf(stdout, "==>[recieved kap1_1 response %d] len = %d\n",\ fprintf(stdout, "==>[recieved kap1_1 response %d] len = %d\n",\
kp1_cnt, length); kp1_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf,length); print_as_hex(pkt_data,length);
memcpy(seed, buf+8, 4); memcpy(seed, pkt_data+8, 4);
memcpy(host_ip, buf+12, 4); memcpy(host_ip, pkt_data+12, 4);
// memcpy(drcom_config.host_ip, buf+12, 4); // memcpy(drcom_config.host_ip, pkt_data+12, 4);
kp1_cnt++; kp1_cnt++;
retry_cnt = 1; retry_cnt = 1;
while (1) while (1)
{ {
length = make_keep_alive1_pkt2(buf, seed, host_ip, kp1_cnt); length = make_keep_alive1_pkt2(pkt_data, seed, host_ip, kp1_cnt);
sendto(client_sockfd, buf, length, 0,\ sendto(client_sockfd, pkt_data, length, 0,\
(struct sockaddr *) &remote_addr, sizeof(remote_addr)); (struct sockaddr *) &remote_addr, sizeof(remote_addr));
fprintf(stdout, "<==[sended kap1_2 request %d] len = %d\n",\ fprintf(stdout, "<==[sended kap1_2 request %d] len = %d\n",\
kp1_cnt, length); kp1_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf, length); print_as_hex(pkt_data, length);
length = 0; length = 0;
if (retry_cnt > 5) if (retry_cnt > 5)
{ {
goto HEART_BEAT_START; goto HEART_BEAT_START;
} }
if ((length = recvfrom(client_sockfd, buf, 1024, 0, \ if ((length = recvfrom(client_sockfd, pkt_data, 1024, 0, \
(struct sockaddr *) &remote_addr, &sin_size)) == -1) (struct sockaddr *) &remote_addr, &sin_size)) == -1)
{ {
fprintf(stdout, "recv kap1_2 timeout, retry %d!\n", retry_cnt++); fprintf(stdout, "recv kap1_2 timeout, retry %d!\n", retry_cnt++);
...@@ -197,7 +205,7 @@ HEART_BEAT_START: ...@@ -197,7 +205,7 @@ HEART_BEAT_START:
fprintf(stdout, "==>[recieved kap1_2 response %d] len = %d\n",\ fprintf(stdout, "==>[recieved kap1_2 response %d] len = %d\n",\
kp1_cnt, length); kp1_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf,length); print_as_hex(pkt_data,length);
kp1_cnt++; kp1_cnt++;
retry_cnt = 0; retry_cnt = 0;
...@@ -208,20 +216,20 @@ HEART_BEAT_START: ...@@ -208,20 +216,20 @@ HEART_BEAT_START:
sleep(3); sleep(3);
while (1) while (1)
{ {
length = make_keep_alive2_pkt1(buf, kp2_cnt, ka2_flag, rand, ka2_key); length = make_keep_alive2_pkt1(pkt_data, kp2_cnt, ka2_flag, rand, ka2_key);
sendto(client_sockfd, buf, length, 0,\ sendto(client_sockfd, pkt_data, length, 0,\
(struct sockaddr *) &remote_addr, sizeof(remote_addr)); (struct sockaddr *) &remote_addr, sizeof(remote_addr));
fprintf(stdout, "<==[sended kap2_1 request %d] len = %d\n",\ fprintf(stdout, "<==[sended kap2_1 request %d] len = %d\n",\
kp2_cnt, length); kp2_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf, length); print_as_hex(pkt_data, length);
if (retry_cnt > 5) if (retry_cnt > 5)
{ {
goto HEART_BEAT_START; goto HEART_BEAT_START;
} }
memset(buf, 0x00, 1024); memset(pkt_data, 0x00, 1024);
if ((length = recvfrom(client_sockfd, buf, 1024, 0,\ if ((length = recvfrom(client_sockfd, pkt_data, 1024, 0,\
(struct sockaddr *) &remote_addr, &sin_size)) == -1) (struct sockaddr *) &remote_addr, &sin_size)) == -1)
{ {
fprintf(stdout, "recv kap2_1 timeout, retry %d!\n", retry_cnt++); fprintf(stdout, "recv kap2_1 timeout, retry %d!\n", retry_cnt++);
...@@ -229,13 +237,13 @@ HEART_BEAT_START: ...@@ -229,13 +237,13 @@ HEART_BEAT_START:
} }
else else
{ {
if (buf[0] == 0x07 && buf[2] == 0x10) if (pkt_data[0] == 0x07 && pkt_data[2] == 0x10)
{ {
memcpy(ka2_flag, buf+6, 2); memcpy(ka2_flag, pkt_data+6, 2);
fprintf(stdout, "==>[recieved kap2_1 response %d] len = %d\n",\ fprintf(stdout, "==>[recieved kap2_1 response %d] len = %d\n",\
kp2_cnt, length); kp2_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf,length); print_as_hex(pkt_data, length);
kp2_cnt++; kp2_cnt++;
continue; continue;
} }
...@@ -245,26 +253,26 @@ HEART_BEAT_START: ...@@ -245,26 +253,26 @@ HEART_BEAT_START:
fprintf(stdout, "==>[recieved kap2_1 response %d] len = %d\n",\ fprintf(stdout, "==>[recieved kap2_1 response %d] len = %d\n",\
kp2_cnt, length); kp2_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf,length); print_as_hex(pkt_data,length);
memcpy(ka2_key, buf+16, 4); memcpy(ka2_key, pkt_data+16, 4);
kp2_cnt++; kp2_cnt++;
while (1) while (1)
{ {
length = make_keep_alive2_pkt2(buf, kp2_cnt, ka2_flag, rand, ka2_key, host_ip); length = make_keep_alive2_pkt2(pkt_data, kp2_cnt, ka2_flag, rand, ka2_key, host_ip);
sendto(client_sockfd, buf, length, 0,\ sendto(client_sockfd, pkt_data, length, 0,\
(struct sockaddr *) &remote_addr, sizeof(remote_addr)); (struct sockaddr *) &remote_addr, sizeof(remote_addr));
fprintf(stdout, "<==[sended kap2_2 request %d] len = %d\n", \ fprintf(stdout, "<==[sended kap2_2 request %d] len = %d\n", \
kp2_cnt, length); kp2_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf, length); print_as_hex(pkt_data, length);
if (retry_cnt > 5) if (retry_cnt > 5)
{ {
goto HEART_BEAT_START; goto HEART_BEAT_START;
} }
memset(buf, 0x00, 1024); memset(pkt_data, 0x00, 1024);
if ((length = recvfrom(client_sockfd, buf, 1024, 0,\ if ((length = recvfrom(client_sockfd, pkt_data, 1024, 0,\
(struct sockaddr *) &remote_addr, &sin_size)) == -1) (struct sockaddr *) &remote_addr, &sin_size)) == -1)
{ {
fprintf(stdout, "recv kap2_2 timeout, retry %d!\n", retry_cnt++); fprintf(stdout, "recv kap2_2 timeout, retry %d!\n", retry_cnt++);
...@@ -278,7 +286,7 @@ HEART_BEAT_START: ...@@ -278,7 +286,7 @@ HEART_BEAT_START:
fprintf(stdout, "==>[recieved kap2_2 response %d] len = %d\n",\ fprintf(stdout, "==>[recieved kap2_2 response %d] len = %d\n",\
kp2_cnt, length); kp2_cnt, length);
fflush(stdout); fflush(stdout);
print_as_hex(buf,length); print_as_hex(pkt_data,length);
kp2_cnt++; kp2_cnt++;
...@@ -394,7 +402,7 @@ static int make_keep_alive1_pkt2(char *buf, char *seed,\ ...@@ -394,7 +402,7 @@ static int make_keep_alive1_pkt2(char *buf, char *seed,\
return index + 16*4; return index + 16*4;
} }
static int gen_ka1_checksum(char *checksum, char *seed, unsigned char mode) static void gen_ka1_checksum(char *checksum, char *seed, unsigned char mode)
{ {
char checksum_t[32] = {0}; char checksum_t[32] = {0};
int32_t temp_num; int32_t temp_num;
...@@ -445,7 +453,6 @@ static int gen_ka1_checksum(char *checksum, char *seed, unsigned char mode) ...@@ -445,7 +453,6 @@ static int gen_ka1_checksum(char *checksum, char *seed, unsigned char mode)
default: default:
break; break;
} }
return 0;
} }
......
...@@ -78,17 +78,25 @@ int main(int argc, char *argv[]) ...@@ -78,17 +78,25 @@ int main(int argc, char *argv[])
static void print_help(char *name) static void print_help(char *name)
{ {
fprintf(stdout, "gdut-drcom\n"); // fprintf(stdout, "gdut-drcom\n");
fprintf(stdout, " A third-partydrcom client for gdut.\n\n"); fprintf(stdout,
" __ __ __ \n"
" ___ ___/ /_ __/ /_ ___/ /__________ __ _ \n"
" / _ `/ _ / // / __/ / _ / __/ __/ _ \\/ ' \\\n"
" \\_, /\\_,_/\\_,_/\\__/ \\_,_/_/ \\__/\\___/_/_/_/\n"
" /___/ \n\n"
);
fprintf(stdout, " A third-party drcom client for gdut.\n\n");
fprintf(stdout, "usage:\n"); fprintf(stdout, "usage:\n");
fprintf(stdout, " %s\n", name); fprintf(stdout, " %s\n", name);
fprintf(stdout, " --remote-ip <ip addr>\t\tThe server ip.\n"); fprintf(stdout, " --remote-ip <ip addr> The server ip.\n");
fprintf(stdout, "\n"); fprintf(stdout, "\n");
fprintf(stdout, " [--remote-port <port>]\t\tThe server port, default as 61440.\n"); fprintf(stdout, " [--remote-port <port>] The server port, default as 61440.\n");
fprintf(stdout, " [--keep-alive1-flag <flag>]\t\tThe keep alive 1 packet's flag," fprintf(stdout, " [--keep-alive1-flag <flag>] The keep alive 1 packet's flag.\n"
"\t\t\t\t\t\t\t\t default as 00.\n"); " default as 00.\n");
fprintf(stdout, " [-c, --config-file <file>]\t\tThe path to config file. " fprintf(stdout, " [-c, --config-file <file>] The path to config file. \n"
"\t\t\t\t\t\t\t\t default as /etc/gdut-drcom.conf\n"); " default as /etc/gdut-drcom.conf.\n");
fprintf(stdout, " [-h, --help]\t\t\tPrint this message.\n"); fprintf(stdout, " [-h, --help] Print this message.\n");
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment