📄 newcamd-client.h
字号:
// implements the newcamd protocol#ifndef __NEWCAMD_CLIENT_H__#define __NEWCAMD_CLIENT_H__#include "rqcamd.h"#include "des.h"#define NETWORK_TIMEOUT 10000 //10 seconds#define MAX_CARD_PROVIDER_COUNT 8// ------------------------------------ triple des class declaration ----------------------------------------class triple_des{ private: i_DES_key_schedule ks1,ks2; void set_odd_parity(unsigned char *key); public: triple_des( void ); unsigned char des_key[16]; void schedule_key( void ); int pad_message(unsigned char *data, unsigned short int len); unsigned char xor_checksum(const unsigned char *buf, unsigned int length); void xor_buffers(unsigned char *dest, unsigned char *src_1, unsigned char *src_2, unsigned int length); // 14 byte key input, 16 byte expanded output void expand(unsigned char *expanded, unsigned char *normal); int decrypt(unsigned char *data, int len); int encrypt(const unsigned char *data, int len, unsigned char *crypt);};// ------------------------------------ newcamd client class declarations --------------------------------------#define CWS_NETMSGSIZE 240#define USERNAME_LENGTH 32#define PASSWORD_LENGTH 32#define CWS_FIRSTCMDNO 0xE0typedef enum{ MSG_CLIENT_2_SERVER_LOGIN = CWS_FIRSTCMDNO, MSG_CLIENT_2_SERVER_LOGIN_ACK, MSG_CLIENT_2_SERVER_LOGIN_NAK, MSG_CARD_DATA_REQ, MSG_CARD_DATA, MSG_SERVER_2_CLIENT_NAME, MSG_SERVER_2_CLIENT_NAME_ACK, MSG_SERVER_2_CLIENT_NAME_NAK, MSG_SERVER_2_CLIENT_LOGIN, MSG_SERVER_2_CLIENT_LOGIN_ACK, MSG_SERVER_2_CLIENT_LOGIN_NAK, MSG_ADMIN, MSG_ADMIN_ACK, MSG_ADMIN_LOGIN, MSG_ADMIN_LOGIN_ACK, MSG_ADMIN_LOGIN_NAK, MSG_ADMIN_COMMAND, MSG_ADMIN_COMMAND_ACK, MSG_ADMIN_COMMAND_NAK} net_msg_type_t;typedef enum{ LOGIN_KEY, SESSION_KEY} key_encryption_t;typedef enum{ VERSION_520, VERSION_525} protocol_version_t;class newcamd_client{ public: newcamd_client(char *server_url, unsigned int timeout, protocol_version_t version = VERSION_525); ~newcamd_client(void); // configuration related unsigned int status; char status_description[128]; bool process_emms; int dbg; short int user_id; unsigned short int card_caid; unsigned short int card_provider_id[MAX_CARD_PROVIDER_COUNT]; unsigned short int card_provider_id_count; unsigned char cam_id[4]; //control words unsigned char cw_0[8]; unsigned char cw_1[8]; //verbs bool is_ready( void ); void send_ecm(unsigned char *ecm_data, unsigned short int ecm_data_length, unsigned short int sid); void send_emm(unsigned char *emm_data, unsigned short int emm_data_length); private: int fd; //file descriptor for network connections. triple_des des; unsigned short int sent_sequence_id; unsigned short int received_sequence_id; bool ready; int network_timeout; protocol_version_t protocol_version; unsigned char custom_data[8]; unsigned short int custom_data_length; char url[128]; char hostname[64]; unsigned int port; char username[32]; char password[32]; // key related unsigned char random_key[14]; unsigned char des_key[14]; unsigned char login_key[14]; unsigned char session_key[14]; unsigned char expanded_login_key[16]; unsigned char expanded_session_key[16]; //misc void set_protocol_version( protocol_version_t version ); void set_sid( unsigned short int sid ); void create_login_key(); void create_session_key( char *encrypted_password ); void server_connect( void ); void server_login( void ); void server_disconnect( void ); void parse_url( void ); //network related int connect_non_blocking(int fd, struct sockaddr_in *addr, unsigned int timeout_seconds); void send_command( net_msg_type_t command, unsigned char *data, unsigned short int data_length, unsigned char *custom_data, key_encryption_t key_type ); net_msg_type_t receive_command( unsigned char *custom_data, key_encryption_t key_type ); void send_message(unsigned char *message, unsigned short int length, unsigned char *custom_data, key_encryption_t key_type ); int receive_message(unsigned char *message, unsigned char *custom_data, key_encryption_t key_type ); int network_write(unsigned char *buffer, unsigned int length); int network_read(unsigned char *buffer, unsigned int length, int override_timeout = -1); int network_read_poll(int override_timeout = -1); void debug_output(unsigned char *buffer, unsigned int length, char *header);};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -