⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpalogin.h

📁 big pond WAN connect function
💻 H
字号:
/*
**	BPALogin v2.0 - lightweight portable BIDS2 login client
**	Copyright (c) 1999-2000  Shane Hyde (shyde@trontech.net)
** 
**  This program is free software; you can redistribute it and/or modify
**  it under the terms of the GNU General Public License as published by
**  the Free Software Foundation; either version 2 of the License, or
**  (at your option) any later version.
** 
**  This program is distributed in the hope that it will be useful,
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**  GNU General Public License for more details.
** 
**  You should have received a copy of the GNU General Public License
**  along with this program; if not, write to the Free Software
**  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
*/ 

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

#include <unistd.h>
#include <sys/systm.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>



// Define close socket
#define closesocket(s)  close(s)

#define TRUE    1
#define FALSE   0


#define LOGIN_SOFTWARE                  "bpalogin"
#define LOGIN_VERSION                   1

#define MAXUSERNAME	 	                25
#define MAXPASSWORD		                25
#define MAXAUTHSERVER	                80
#define MAXAUTHDOMAIN	                80
#define MAXLOGINPROG	                256
#define MAXCONFFILE		                256
#define MAXLOCALADDRESS                 32
#define MAXDDNSCONFFILE                 256

#define DEFAULT_DEBUG 		            1
#define DEFAULT_AUTHSERVER 		        "61.9.128.13"
#define DEFAULT_AUTHDOMAIN 		        ""
#define DEFAULT_AUTHPORT 		        5050
#define DEFAULT_LOCALPORT 		        5050        // KenLo for authentication firewall issue
#define DEFAULT_MINHEARTBEAT 	        60
#define DEFAULT_CONFFILE 		        "/etc/bpalogin.conf"

/*
** state engine codes
*/
#define STATE_NEED_PROTOCOL				0
#define STATE_SEND_PROT_REQ				1
#define STATE_AWAIT_NEG_RESP			2
#define STATE_SEND_LOGIN_REQ			3
#define STATE_AWAIT_LOGIN_AUTH_RESP		4
#define STATE_SEND_LOGIN_AUTH_REQ		5
#define STATE_AWAIT_LOGIN_RESP			6
#define STATE_SEND_LOGOUT_REQ			7
#define STATE_AWAIT_LOGOUT_AUTH_RESP	8
#define STATE_SEND_LOGOUT_AUTH_REQ		9
#define STATE_AWAIT_LOGOUT_RESP			10
#define STATE_IDLE_LOGIN				11
#define STATE_RECEIVED_STATUS_REQ		12
#define STATE_RECEIVED_RESTART_REQ		13
#define STATE_IDLE_LOGOFF				14

/*
** message type codes
*/
#define T_MSG_MIN 				1

#define T_MSG_PROTOCOL_NEG_REQ	1
#define T_MSG_PROTOCOL_NEG_RESP 2
#define T_MSG_LOGIN_REQ			3
#define T_MSG_LOGIN_AUTH_REQ	4
#define T_MSG_LOGIN_RESP		5
#define T_MSG_LOGOUT_REQ		6
#define T_MSG_LOGOUT_AUTH_RESP	7
#define T_MSG_LOGOUT_RESP		8
#define T_MSG_AUTH_RESP			9
#define T_MSG_AUTH_REQ			10
#define T_MSG_STATUS_REQ		11
#define T_MSG_STATUS_RESP		12
#define T_MSG_RESTART_REQ		13
#define T_MSG_RESTART_RESP		14
#define T_MSG_MAX 14

/*
** message parameter codes
*/
#define T_PARAM_MIN 1

#define T_PARAM_PROTOCOL_LIST		1
#define T_PARAM_PROTOCOL_SELECT		2
#define T_PARAM_CLIENT_VERSION		3
#define T_PARAM_OS_IDENTITY			4
#define T_PARAM_OS_VERSION			5
#define T_PARAM_REASON_CODE			6
#define T_PARAM_USERNAME			7
#define T_PARAM_REQ_PORT			8
#define T_PARAM_RESPONSE_TEXT		9
#define T_PARAM_STATUS_CODE			10
#define T_PARAM_AUTH_CREDENTIALS	11
#define T_PARAM_NONCE				12
#define T_PARAM_SEQNUM				13
#define T_PARAM_HASH_METHOD			14
#define T_PARAM_LOGIN_SERVICE_PORT	15
#define T_PARAM_LOGOUT_SERVICE_PORT	16
#define T_PARAM_STATUS_SERVICE_PORT	17
#define T_PARAM_SUSPEND_IND			18
#define T_PARAM_STATUS_AUTH			19
#define T_PARAM_RESTART_AUTH		20
#define T_PARAM_TIMESTAMP			21
#define T_PARAM_TSMLIST				22
#define T_PARAM_LOGIN_PARAM_HASH	23
#define T_PARAM_LOGIN_SERVER_HOST	24
#define T_PARAM_MAX					24

/*
** login reason codes
*/
#define T_LOGIN_REASON_CODE_NORMAL 0
#define T_LOGIN_REASON_CODE_REAUTH 1

/*
** logout reason codes
*/
#define T_LOGOUT_REASON_CODE_USER_INITIATED	0
#define T_LOGOUT_REASON_CODE_APP_SHUTDOWN	1
#define T_LOGOUT_REASON_CODE_OS_SHUTDOWN	2
#define T_LOGOUT_REASON_CODE_UNKNOWN		3

/*
** client status transaction codes
*/
#define T_STATUS_TRANSACTION_OK 0

/*
** restart reasons
*/
#define T_RESTART_ADMIN 0

/*
** auth responses
*/
#define T_AUTH_NOHASH 0
#define T_AUTH_MD5_HASH 1

/*
** protocol types
*/
#define T_PROTOCOL_CHAL 1

/*
** status return codes
*/
#define T_STATUS_SUCCESS								0
#define T_STATUS_USERNAME_NOT_FOUND						1
#define T_STATUS_INCORRECT_PASSWORD						2
#define T_STATUS_ACCOUNT_DISABLED						3
#define T_STATUS_USER_DISABLED							4
#define T_STATUS_LOGIN_SUCCESSFUL_ALREADY_LOGGED_IN		100
#define T_STATUS_LOGIN_RETRY_LIMIT						101
#define T_STATUS_LOGIN_SUCCESSFUL_SWVER					102
#define T_STATUS_LOGIN_FAIL_SW							103
#define T_STATUS_LOGOUT_SUCCESSFUL_ALREADY_DISCONNECTED	200
#define T_STATUS_LOGOUT_AUTH_RETRY_LIMIT				201
#define T_STATUS_LOGIN_SUCCESS_SWVER					300
#define T_STATUS_LOGIN_FAIL_SWVER						301
#define T_STATUS_LOGIN_FAIL_INV_PROT					302
#define T_STATUS_LOGIN_UNKNOWN							500
#define T_STATUS_FAIL_USERNAME_VALIDATE					501
#define T_STATUS_FAIL_PASSWORD_VALIDATE					502

typedef unsigned short INT2;
typedef unsigned int INT4;

struct transaction
{
	char data[1512];
	int length;
};

/*
**  This structure holds all information necessary to connect/disconnect
*/
struct session
{
	/*
	**  Control paramters
	*/
	char username[MAXUSERNAME];
	char password[MAXPASSWORD];
	char authserver[MAXAUTHSERVER];
	char authdomain[MAXAUTHDOMAIN];
	unsigned short authport;
	char connectedprog[MAXLOGINPROG];
	char disconnectedprog[MAXLOGINPROG];
	void * pUserData;
	int shutdown;
	char localaddress[32];
	unsigned short localport;
	int minheartbeat;

	/*
	**  Callback functions
	*/
	void (*debug)(int,char *,...);
	void (*critical)(char *);
	void (*noncritical)(char *,...);
	void (*onconnected)(int listenport);
	void (*ondisconnected)(int reason);

	/*
	**  Internal data
	*/
	INT4 sessionid;
	INT2 listenport;
	struct sockaddr_in authhost;
	char osname[80];
	char osrelease[80];
	int listensock;
	struct sockaddr_in localaddr;
	struct sockaddr_in localipaddress;

	INT2 protocol;
	INT2 loginserviceport;
	char loginserverhost[128];
	INT2 hashmethod;
	char nonce[17];
	INT2 retcode;
	INT2 logoutport;
	INT2 statusport;
	char tsmlist[512];
	char tsmlist_s[512][20];
	struct sockaddr_in tsmlist_in[20];
	int tsmcount;
	char resptext[512];
	INT4 timestamp;

	time_t lastheartbeat;
	int recenthb;
	INT4 sequence;
	struct sockaddr_in fromaddr;
};

/*
**  Prototypes
*/
int bpa_isshutdown(struct session *s);
int	bpa_mainloop(struct session *);
int handle_heartbeats(struct session *);

void start_transaction(struct transaction * t,INT2 msgtype,INT4 sessionid);
void send_transaction(struct session *s,int socket,struct transaction * t);
INT2 receive_transaction(struct session *s,int socket,struct transaction * t);
INT2 receive_udp_transaction(struct session *s,int socket,struct transaction * t,struct sockaddr_in *addr);
void send_udp_transaction(struct session * s,struct transaction * t);

int extract_valueINT2(struct session *s,struct transaction * t,INT2 parm,INT2 *v);
int	extract_valueINT4(struct session *s,struct transaction *,INT2,INT4 *);
int	extract_valuestring(struct session *s,struct transaction *,INT2,char *);

void add_field_string(struct session *s,struct transaction * t,INT2 fn,char * p);
void add_field_data(struct session *s,struct transaction * t,INT2 fn,char * p,int c);
void add_field_INT2(struct session *s,struct transaction * t,INT2 fn,INT2 v);
void add_field_INT4(struct session *s,struct transaction * t,INT2 fn,INT4 v);

int bpa_login(struct session *);
int bpa_logout(INT2,struct session *);

INT2 read_INT2(void *);
INT4 read_INT4(void *);

void socketerror(struct session *,const char *);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -