14# define SYSTEM "Windows"
16# define SHUT_RD SD_RECEIVE
17# define SHUT_WR SD_SEND
18# define SHUT_RDWR SD_BOTH
20# include <netinet/in.h>
21# include <netinet/tcp.h>
22# include <arpa/inet.h>
24# define closesocket(s) close(s)
26# define INVALID_SOCKET size_t(-1)
27# define SOCKET_ERROR (-1)
28# if defined(__LINUX__)
30# if defined(__ANDROID__)
31# define SYSTEM "Android"
33# define SYSTEM "ARM Linux"
36# if defined(__ANDROID__)
37# define SYSTEM "Android x86"
38# define SYSTEM "Android x86"
40# define SYSTEM "Linux"
46# define __SINGLE_THREADED_SERVER__
47# elif defined(__MAC__)
48# define SYSTEM "Mac OS X"
50# error "Unknown platform"
52# include <sys/socket.h>
53# include <netinet/in.h>
57# define _SYSBITS " 64-bit"
59# define _SYSBITS " 32-bit"
64# define SYSBITS _SYSBITS " (sizeof ea=64)"
66# define SYSBITS _SYSBITS " (sizeof ea=32)"
69# define SYSBITS _SYSBITS
72#ifdef __SINGLE_THREADED_SERVER__
73# define __SERVER_TYPE__ "ST"
75# define __SERVER_TYPE__ "MT"
78#define TIMEOUT (1000/25)
79#define TIMEOUT_INFINITY -1
80#define RECV_TIMEOUT_PERIOD 10000
95#define RPC_CANCELLED 6
108#define RPC_GET_PROCESSES 12
109#define RPC_START_PROCESS 13
110#define RPC_EXIT_PROCESS 14
111#define RPC_ATTACH_PROCESS 15
112#define RPC_DETACH_PROCESS 16
113#define RPC_GET_DEBUG_EVENT 17
114#define RPC_PREPARE_TO_PAUSE_PROCESS 18
115#define RPC_STOPPED_AT_DEBUG_EVENT 19
116#define RPC_CONTINUE_AFTER_EVENT 20
117#define RPC_TH_SUSPEND 21
118#define RPC_TH_CONTINUE 22
119#define RPC_SET_RESUME_MODE 23
120#define RPC_GET_MEMORY_INFO 24
121#define RPC_READ_MEMORY 25
122#define RPC_WRITE_MEMORY 26
123#define RPC_UPDATE_BPTS 27
124#define RPC_UPDATE_LOWCNDS 28
125#define RPC_EVAL_LOWCND 29
126#define RPC_ISOK_BPT 30
127#define RPC_READ_REGS 31
128#define RPC_WRITE_REG 32
129#define RPC_GET_SREG_BASE 33
130#define RPC_SET_EXCEPTION_INFO 34
132#define RPC_OPEN_FILE 35
133#define RPC_CLOSE_FILE 36
134#define RPC_READ_FILE 37
135#define RPC_WRITE_FILE 38
137#define RPC_UPDATE_CALL_STACK 40
138#define RPC_APPCALL 41
139#define RPC_CLEANUP_APPCALL 42
141#define RPC_GET_SCATTERED_IMAGE 44
142#define RPC_GET_IMAGE_UUID 45
143#define RPC_GET_SEGM_START 46
144#define RPC_BIN_SEARCH 47
145#define RPC_GET_DYNREGS 48
148#define RPC_SET_DEBUG_NAMES 50
149#define RPC_SYNC_STUB 51
152#define RPC_WARNING 54
153#define RPC_HANDLE_DEBUG_EVENT 55
154#define RPC_REPORT_IDC_ERROR 56
155#define RPC_IMPORT_DLL 57
175#define DEFINE_ONE_NOTIFICATION_FUNCTION(FuncName, NotifCode, RpcEngineInst) \
176 AS_PRINTF(2, 3) void FuncName(const char *format, ...) \
179 va_start(va, format); \
180 dvnotif(NotifCode, RpcEngineInst, format, va); \
184#define DEFINE_ALL_NOTIFICATION_FUNCTIONS(RpcEngineInst) \
185 DEFINE_ONE_NOTIFICATION_FUNCTION(dmsg, 0, RpcEngineInst) \
186 DEFINE_ONE_NOTIFICATION_FUNCTION(dwarning, 1, RpcEngineInst) \
187 DEFINE_ONE_NOTIFICATION_FUNCTION(derror, -1, RpcEngineInst)
199# define IRSERR_TIMEOUT WAIT_TIMEOUT
201# define IRSERR_TIMEOUT ETIME
203#define IRSERR_CANCELLED -0xE5CA7E
204#define IRSERR_SKIP_ITER -0x5217
212struct idarpc_stream_t;
242 if (
port != 0 &&
port != default_port )
245 s.sprnt(
"[%s]:%u",
host.c_str(),
port);
247 s.sprnt(
"%s:%u",
host.c_str(),
port);
290 if ( (flags & PCF_MERGE) == 0 )
295 s.
split(&parts,
"@");
296 if ( parts.
size() > 2 )
299 if ( parts.
size() == 2 )
305 p0.
split(&identity_parts,
":");
306 if ( identity_parts.
size() > 2 )
309 if ( identity_parts.
size() == 2 )
314 qstring &addr = parts[addr_idx];
315 const char *ptr = addr.
c_str();
316 const char *colon =
nullptr;
319 const char *br = strchr(ptr,
']');
320 if ( br ==
nullptr || br == ptr+1 )
330 if ( strnieq(ptr,
"::ffff:", 7)
331 && strchr(ptr,
'.') !=
nullptr )
335 colon = strchr(ptr,
':');
337 if ( colon !=
nullptr )
340 int port = strtoul(++colon, &
end, 10);
343 while ( *
end ==
' ' )
347 addr.
resize(colon - ptr - 1);
360#define BCF_INCLUDE_USER 1
361#define BCF_INCLUDE_PASS 2
370 if ( (flags & BCF_INCLUDE_USER) != 0 && !
username.empty() )
427 bool set(
int _ms, T *_cb,
void *_ud)
430 if ( _cb !=
nullptr && _ms > -1 )
436 return cb !=
nullptr;
439 T *
get(
int *out_ms=
nullptr,
void **out_ud=
nullptr)
const
441 if ( out_ms !=
nullptr )
443 if ( out_ud !=
nullptr )
455 size_t cb =
sizeof(*this);
469 size_t cb =
sizeof(*this);
476 :
bind(_host, _port) {}
482bool irs_accept(idarpc_stream_t *irs, idarpc_stream_t *listener);
484int irs_ready(idarpc_stream_t *irs,
int timeout_ms = -1);
487void irs_term(idarpc_stream_t **pirs,
int shutdown_flags = -1);
496 idarpc_stream_t *irs,
499 int timeout_ms = -1);
530 return s * 10 + us / (100 * 1000);
580 typedef std::map<network_client_handler_t *, qthread_t>
storage_t;
601#define SERVER_CLIOPT_DEFAULTS 0x0
602#define SERVER_CLIOPT_NOTLS 0x1
603#define SERVER_CLIOPT_RECORDING 0x2
611 idarpc_stream_t *
irs =
nullptr;
651struct product_entry_t;
653struct license_info_t;
663 const licsrv_rpc::license_t &lic);
672 const licsrv_rpc::license_t & )
678 const licsrv_rpc::license_t &lic)
684 const product_entry_t & ,
700struct licmgr_logger_t;
717 bool _multi_threaded,
719 const char *default_license_file_name);
745#define VERBOSE_ENABLED
746#ifdef VERBOSE_ENABLED
747#define verb(x) do { if ( verbose ) msg x; } while(0)
748#define verb_eng(engine, x) do { if ( (engine)->verbose ) msg x; } while(0)
751#define verb_eng(engine, x)
825 size_t _n_pkt_timeouts = 0);
855 int recv_data(
void *out,
size_t len,
int timeout_ms);
871 idarpc_stream_t *rpc_irs;
873 int protocol_version;
880 bool as_input)
const;
889 const char *line_prefix=
nullptr) const newapi;
899 idarpc_stream_t *_irs,
904 size_t _n_pkt_timeouts = 0,
905 int _protocol_version = 0)
906 :
rpc_engine_t(_is_client, _recv_timeout, _pkt_timeouts, _n_pkt_timeouts),
907 rpc_irs(_irs), our_irs(_our_irs), protocol_version(_protocol_version)
921 virtual idarpc_stream_t *
get_irs()
const override {
return rpc_irs; }
928 QASSERT(2757, _protocol_version <= protocol_version);
930 protocol_version = _protocol_version;
945 const char *
const server_name;
946 bool started_receiving_response =
false;
947 bool was_user_cancelled =
false;
949 virtual void init(idarpc_stream_t *_irs);
953 const char *_server_name,
954 rpc_engine_creator_t *engine_creator,
955 idarpc_stream_t *_irs)
957 server_name(_server_name)
959 generic_client_t::init(_irs);
988 size_t nhex_per_line=16);
990#define REPEAT_THRESHOLD 100
992#define REPEAT_BYTES_MARKER '#'
995struct login_credentials_t;
996#define LCRED_HELPER_DEFINITIONS(decl) \
997decl bool ida_export lcred_process_switch(login_credentials_t *lc, const char *args);
998LCRED_HELPER_DEFINITIONS(idaman)
1003 LCRED_HELPER_DEFINITIONS(
friend)
1005#define LCS_NO_TLS 0x1
1006#define LCS_SEEN_PROXY_OPTION 0x2
1007#define LCS_RESERVED_BITS 8
1012 virtual ~login_credentials_t() {}
1013 virtual bool process_switch(
const char *
args) newapi
1015 return lcred_process_switch(
this,
args);
1021 if ( !password_override.empty() )
1023 *out = password_override;
1026 return do_load_password(out, errbuf);
1036 return do_load_proxy_password(out, errbuf);
1039 bool use_tls()
const {
return (state & LCS_NO_TLS) == 0; }
1040 void set_use_tls(
bool use_tls) {
setflag(state, LCS_NO_TLS, !use_tls); }
1041 bool has_seen_proxy_option()
const {
return (state & LCS_SEEN_PROXY_OPTION) != 0; }
1042 friend struct login_credentials_internal_t;
1045 bool _process_switch(
const char *
args);
1046 bool load_pass_from_keychain(
qstring * ,
qstring * ,
const char * )
const;
1047 virtual bool do_load_password(
qstring * ,
qstring * )
const newapi {
return false; }
1048 virtual bool do_load_proxy_password(
qstring * ,
qstring * )
const newapi {
return false; }
1049 virtual bool write(
qstring * )
const newapi {
return false; }
1053#define VAULT_APP_NAME "hexvault"
1054#define VAULT_PROXY_APP_NAME VAULT_APP_NAME "_proxy"
1055#define DEFAULT_VAULT_HOST "hexvault"
1056#define DEFAULT_VAULT_PORT 65433
1079struct vault_credentials_t;
1080#define VCRED_HELPER_DEFINITIONS(decl) \
1081decl void ida_export vcred_init(vault_credentials_t *vc);\
1082decl bool ida_export vcred_process_switch(vault_credentials_t *vc, const char *arg);\
1083decl bool ida_export vcred_do_load_password(const vault_credentials_t *vc, qstring *out, qstring *errbuf);\
1084decl bool ida_export vcred_do_load_proxy_password(const vault_credentials_t *vc, qstring *out, qstring *errbuf);\
1085decl bool ida_export vcred_write(const vault_credentials_t *vc, qstring *errbuf);\
1086decl ask_user_result_t ida_export vcred_ask_user(vault_credentials_t *vc, credential_validator_t *validator, qstring *errbuf, uint32 auf_flags);\
1087decl bool ida_export vcred_reg_should_store_info();\
1088decl void ida_export vcred_reg_set_store_info(bool store_pass);\
1089decl bool ida_export vcred_reg_del_store_info();\
1090decl bool ida_export vcred_reg_should_auto_connect();\
1091decl void ida_export vcred_reg_set_auto_connect(bool auto_connect);\
1092decl bool ida_export vcred_reg_del_auto_connect();\
1093decl void ida_export vcred_reg_set_site(const vault_credentials_t *vc, const char *site);\
1094decl bool ida_export vcred_load_site(vault_credentials_t *vc);
1095VCRED_HELPER_DEFINITIONS(idaman)
1098struct vault_credentials_t :
public login_credentials_t
1100 VCRED_HELPER_DEFINITIONS(
friend)
1101 typedef login_credentials_t inherited;
1103#define VCS_SEEN_SITE_OPTION (0x1 << LCS_RESERVED_BITS)
1104#define VCS_UPDATE_REG_INFO (0x2 << LCS_RESERVED_BITS)
1105#define VCS_USE_PROXY (0x4 << LCS_RESERVED_BITS)
1107 vault_credentials_t() : login_credentials_t(DEFAULT_VAULT_HOST, DEFAULT_VAULT_PORT) {}
1108 virtual ~vault_credentials_t() {}
1109 void init() { vcred_init(
this); }
1110 virtual bool process_switch(
const char *arg)
override {
return vcred_process_switch(
this, arg); }
1111 virtual void clear()
override
1113 this->login_credentials_t::clear();
1116 virtual bool do_load_password(
qstring *out,
qstring *errbuf)
const override
1118 return vcred_do_load_password(
this, out, errbuf);
1121 virtual bool do_load_proxy_password(
qstring *out,
qstring *errbuf)
const override
1123 return vcred_do_load_proxy_password(
this, out, errbuf);
1125 virtual bool write(
qstring *errbuf)
const override
1127 return vcred_write(
this, errbuf);
1129#define AUF_SILENT_UPDATE_FAILURE 0x1
1131 credential_validator_t *validator,
1135 return vcred_ask_user(
this, validator, errbuf, auf_flags);
1138 bool update(
qstring *errbuf)
const;
1139 bool del(
qstring *errbuf)
const;
1140 void reg_set_site(
const char *site)
const { vcred_reg_set_site(
this, site); }
1142 bool load_site() {
return vcred_load_site(
this); }
1143 void load_proxy_info();
1145 bool has_seen_site_option()
const {
return (state & VCS_SEEN_SITE_OPTION) != 0; }
1147 static bool reg_should_store_info() {
return vcred_reg_should_store_info(); }
1148 static void reg_set_store_info(
bool store_pass) { vcred_reg_set_store_info(store_pass); }
1149 static bool reg_del_store_info() {
return vcred_reg_del_store_info(); }
1150 static bool reg_should_auto_connect() {
return vcred_reg_should_auto_connect(); }
1151 static void reg_set_auto_connect(
bool auto_connect) { vcred_reg_set_auto_connect(auto_connect); }
1152 static bool reg_del_auto_connect() {
return vcred_reg_del_auto_connect(); }
1157 credential_validator_t *validator,
1160 bool _write(
qstring *errbuf)
const;
1161 void _reg_set_site(
const char *site)
const;
1162 void get_reg_key(
qstring *out)
const;
1167# define PUBLIC_LUMINA_HOST "public-lumina.hex-rays.com"
1168# define PUBLIC_DEC_HOST "public-lumina.hex-rays.com"
1169# define PUBLIC_TLM_HOST "public-lumina.hex-rays.com"
1171# define PUBLIC_LUMINA_HOST "lumina.hex-rays.com"
1172# define PUBLIC_DEC_HOST "lumina.hex-rays.com"
1173# define PUBLIC_TLM_HOST "tlm.hex-rays.com"
1175#define DEFAULT_LUMINA_PORT 443
1176#define PUBLIC_DEC_PORT 443
1177#define PUBLIC_TLM_PORT 443
1179#define LUMINA_APP_NAME "lumina"
1187 : login_credentials_t(
"", 0)
1191 void init(
bool set_as_primary=
true);
1238#define VPAF_NATURE_FILE 0x01
1239#define VPAF_NATURE_DIR 0x02
1240#define VPAF_NATURE_ABSENT 0x03
1241#define VPAF_NATURE_MASK 0x0F
1242#define VPAF_RESTRICTED 0x10
1245 const char *path_identity,
void swap(_qstring< qchar > &r)
Swap contents of two qstrings. see qvector::swap()
Definition pro.h:3198
bool empty(void) const
Does the qstring have 0 non-null elements?
Definition pro.h:3244
void resize(size_t s, qchar c)
Resize to the given size.
Definition pro.h:3207
static constexpr size_t npos
Definition pro.h:3769
void split(qvector< _qstring< qchar > > *out, const qchar *sep, uint32 flags=0) const
Split a string on SEP, appending the parts to OUT.
_qstring & remove(size_t idx, size_t cnt)
Remove characters from the qstring.
Definition pro.h:3484
_qstring & append(qchar c)
Append c to the end of the qstring.
Definition pro.h:3569
const qchar * c_str(void) const
Convert the qstring to a char *.
Definition pro.h:3246
void clear(void)
Clear qstring and free memory.
Definition pro.h:3242
Vector of bytes (use for dynamic memory)
Definition pro.h:3850
virtual ~generic_client_t()
virtual rpc_packet_data_t * create_failure_packet(const char *errmsg)=0
generic_client_t(const char *_server_name, rpc_engine_creator_t *engine_creator, idarpc_stream_t *_irs)
Definition network.hpp:952
virtual bool try_reconnect(qstring *errbuf)=0
rpc_engine_creator_t * create_rpc_engine
Definition network.hpp:941
virtual bool is_handshake_packet(const rpc_packet_data_t &)
Definition network.hpp:966
recording_rpc_engine_t * rpc_engine
Definition network.hpp:942
friend struct generic_client_internal_t
Definition network.hpp:962
Reimplementation of vector class from STL.
Definition pro.h:2262
size_t size(void) const
Get the number of elements in the qvector.
Definition pro.h:2494
Definition network.hpp:862
virtual rpc_packet_data_t * request_and_response(const rpc_packet_data_t &request) new api
int get_protocol_version() const
Definition network.hpp:924
void record(const rpc_packet_data_t &data, const uchar *bytes, size_t len, bool as_input) const
virtual ~recording_rpc_engine_t()
void record_output(const rpc_packet_data_t &data, const bytevec_t &bytes) const
bool reinit_irs(qstring *errbuf, bool use_tls, const char *server_host, int port)
virtual idarpc_stream_t * get_irs() const override
Definition network.hpp:921
uint64 packet_nr
Definition network.hpp:868
void record_input(const rpc_packet_data_t &data, const rpc_packet_t *rp) const
qstring dumps_dir_path
Definition network.hpp:867
virtual rpc_packet_t * send_request_and_receive_reply(uchar pkt_code, bytevec_t &pkt) override
void set_protocol_version(int _protocol_version)
Definition network.hpp:925
recording_rpc_engine_t(const rpc_packet_type_desc_t *descs, size_t cnt, idarpc_stream_t *_irs, bool _our_irs, bool _is_client, int _recv_timeout, const rpc_pkt_timeout_t *_pkt_timeouts=nullptr, size_t _n_pkt_timeouts=0, int _protocol_version=0)
Definition network.hpp:896
virtual bool get_conversation_name(qstring *) const newapi
Definition network.hpp:884
rpc_packet_data_t * packet_data_from_raw(const rpc_packet_t *rp)
bool is_our_irs() const
Definition network.hpp:922
virtual void get_packet_name(qstring *out, const struct rpc_packet_data_t &data) const newapi
bool start_recording(const qstring &convs_dir)
FILE * fp
Definition network.hpp:866
virtual void format_packet_data(qstring *out, const struct rpc_packet_data_t &data, const char *line_prefix=nullptr) const newapi
bool is_recording() const
Definition network.hpp:797
void register_packet_type_descs(const rpc_packet_type_desc_t *ptypes, size_t cnt)
bool logged_in
Definition network.hpp:812
rpc_packet_t * recv_packet(uchar pkt_code)
int handle_ioctl_packet(bytevec_t &pkt, const uchar *ptr, const uchar *end)
virtual rpc_packet_t * send_request_and_receive_reply(uchar pkt_code, bytevec_t &pkt)=0
virtual bool get_broken_connection(void)
Definition network.hpp:839
void set_pkt_timeouts(const rpc_pkt_timeout_t *_pkt_timeouts, size_t _n_pkt_timeouts)
Definition network.hpp:844
int get_timeout_for_request(uchar pkt_code) const
int recv_timeout
Definition network.hpp:810
rpc_engine_t(bool _is_client, int _recv_timeout, const rpc_pkt_timeout_t *_pkt_timeouts=nullptr, size_t _n_pkt_timeouts=0)
qstring last_errstr
Definition network.hpp:800
const char va_list va
Definition network.hpp:837
const rpc_pkt_timeout_t * pkt_timeouts
Definition network.hpp:807
AS_PRINTF(3, 0) virtual ssize_t send_notif(int code
virtual idarpc_stream_t * get_irs() const =0
bool is_client
Definition network.hpp:811
void set_ioctl_handler(ioctl_handler_t *h)
Definition network.hpp:843
DEFINE_ALL_NOTIFICATION_FUNCTIONS(this)
virtual void set_broken_connection(void)
Definition network.hpp:840
size_t n_pkt_timeouts
Definition network.hpp:808
const char * format
Definition network.hpp:837
int send_ioctl(int fn, const void *buf, size_t size, void **poutbuf, ssize_t *poutsize)
ioctl_handler_t * ioctl_handler
Definition network.hpp:804
bool network_error
Definition network.hpp:799
const rpc_packet_type_desc_t * find_packet_type_desc(const char *name) const
virtual ~rpc_engine_t()
Definition network.hpp:826
int send_data(bytevec_t &data)
const rpc_packet_type_desc_t * find_packet_type_desc(int code) const
idaman THREAD_SAFE va_list va
See qsscanf()
Definition err.h:21
idaman THREAD_SAFE const char * format
Definition fpro.h:78
idaman THREAD_SAFE AS_PRINTF(1, 0) void ida_export vqperror(const char *format
Print error message to stderr (analog of perror)
idaman const char * end
Definition pro.h:1004
int code
Definition fpro.h:88
idaman size_t n
Definition pro.h:1000
cexpr_t * e
Definition hexrays.hpp:7705
carglist_t * args
Definition hexrays.hpp:7720
idaman size_t len
Definition kernwin.hpp:1389
asize_t size
Definition kernwin.hpp:6701
void(idaapi *range_marker)(ea_t ea
Pointer to range marker function (for idaviews and hexviews) This pointer is initialized by setup_ran...
unsigned __int64 uint64
Definition llong.hpp:13
qvector< qstring > qstrvec_t
Definition lumina.hpp:831
Definition network.hpp:656
void irs_set_progress_cb(idarpc_stream_t *irs, int ms, irs_progress_cb_t cb, void *ud=nullptr)
const char * format
Definition network.hpp:195
CASSERT(sizeof(rpc_packet_t)==5)
DECLARE_TYPE_AS_MOVABLE(host_port_t)
constexpr uint32 TIMESTAMP_ISO8601
Definition network.hpp:506
void ensure_one_server(const char *name)
THREAD_SAFE qtime64_t from_lofi_timestamp(lofi_timestamp_t lts)
Definition network.hpp:534
idaman THREAD_SAFE bool ida_export parse_timestamp(utc_timestamp_t *out, const char *in, uint32 flags=0)
idaman THREAD_SAFE bool ida_export format_timestamp(char *out, size_t out_size, utc_timestamp_t ts, uint32 flags=0)
qvector< rpc_packet_type_desc_t > rpc_packet_type_desc_vec_t
Definition network.hpp:786
bool irs_sockname(idarpc_stream_t *irs, qstring *out, bool lookupname=true)
const char * irs_strerror(idarpc_stream_t *irs)
void set_lprintf_output(FILE *out)
void default_check_license_activation(qstring *out_matched_macaddr, const licsrv_rpc::license_t &lic)
void format_hex_dump(qstrvec_t *out, const uchar *buf, size_t size, bool for_comments, size_t nhex_per_line=16)
ask_user_result_t
Definition network.hpp:1072
@ AUR_VALID
Definition network.hpp:1074
@ AUR_CANCELLED
Definition network.hpp:1073
@ AUR_INVALID
Definition network.hpp:1075
qvector< product_entry_t > prodvec_t
Definition network.hpp:652
int ioctl_handler_t(class rpc_engine_t *rpc, int fn, const void *buf, size_t size, void **poutbuf, ssize_t *poutsize)
Definition network.hpp:767
bool irs_cancel_connect_cb_t(void *)
Definition network.hpp:393
int irs_ready(idarpc_stream_t *irs, int timeout_ms=-1)
void default_print_license_info(const licsrv_rpc::license_t &lic)
ssize_t irs_send_data(idarpc_stream_t *irs, const void *buf, size_t n)
progress_loop_ctrl_t irs_progress_cb_t(bool receiving, size_t processed, size_t total, void *)
Definition network.hpp:401
rpc_engine_t * rpc
Definition network.hpp:972
bool irs_sockport(idarpc_stream_t *irs, int *out)
progress_loop_ctrl_t
Definition network.hpp:396
@ plc_proceed
Definition network.hpp:397
@ plc_cancel
Definition network.hpp:399
@ plc_skip_iter
Definition network.hpp:398
uint64 lofi_timestamp_t
Definition network.hpp:524
void finalize_packet(bytevec_t &pkt)
bool irs_peername(idarpc_stream_t *irs, qstring *out, bool lookupname=true)
idarpc_stream_t * irs_new(bool use_tls=false)
irs_cb_info_t< irs_cancel_connect_cb_t > cancel_connect_cb_info_t
Definition network.hpp:450
constexpr size_t TIMESTAMP_BUFSZ
Definition network.hpp:516
ssize_t irs_recv(idarpc_stream_t *irs, void *buf, size_t n)
irs_cb_info_t< irs_progress_cb_t > progress_cb_info_t
Definition network.hpp:449
bool irs_init_server(idarpc_stream_t *irs, const irs_server_opts_t &options)
THREAD_SAFE lofi_timestamp_t to_lofi_timestamp(qtime64_t ts)
Definition network.hpp:526
void validate_path_argument(const char *path_identity, const char *path, uint32 flags)
constexpr uint32 TIMESTAMP_WITH_MS
Definition network.hpp:507
bool irs_init_client(idarpc_stream_t *irs, const irs_client_opts_t &options)
const char va_list va
Definition network.hpp:196
AS_PRINTF(2, 0) ssize_t dvnotif_client(int code
int irs_get_error(idarpc_stream_t *irs)
rpc_packet_data_t * rpc_packet_instantiator_t(const uchar *ptr, size_t len, int version)
Definition network.hpp:776
bool irs_recv_str(idarpc_stream_t *irs, qstring *out, int timeout_ms=-1)
bool license_server_enabled()
qtime64_t utc_timestamp_t
Definition network.hpp:504
bool irs_send_str(idarpc_stream_t *irs, const qstring &str)
void irs_term(idarpc_stream_t **pirs, int shutdown_flags=-1)
ssize_t lwrite(const void *data, size_t size)
ssize_t irs_send(idarpc_stream_t *irs, const void *buf, size_t n)
void call_exit_handlers()
kc_ctx_t * get_keychain_context()
bool irs_accept(idarpc_stream_t *irs, idarpc_stream_t *listener)
base_packet_id_t
Definition network.hpp:84
@ RPC_UNK
Definition network.hpp:86
@ RPC_MEM
Definition network.hpp:87
@ RPC_OK
Definition network.hpp:85
@ base_packet_id_last
Definition network.hpp:88
rpc_notification_type_t
Definition network.hpp:168
@ rnt_warning
Definition network.hpp:171
@ rnt_msg
Definition network.hpp:170
@ rnt_unknown
Definition network.hpp:169
@ rnt_error
Definition network.hpp:172
NORETURN const char bytevec_t prepare_rpc_packet(uchar code)
constexpr uint32 TIMESTAMP_UTC
Definition network.hpp:505
void install_signal_and_exit_handlers()
ssize_t irs_recv_data(idarpc_stream_t *irs, void *buf, size_t n, int timeout_ms=-1)
bool irs_handshake(idarpc_stream_t *irs, int timeout_ms=-1)
This is the first header included in the IDA project.
idaman size_t const char time_t t
Definition pro.h:606
idaman THREAD_SAFE qtime64_t ida_export qtime64(void)
Get the current time with microsecond resolution (in fact the resolution is worse on windows)
unsigned int uint32
unsigned 32 bit value
Definition pro.h:352
uint64 qtime64_t
64-bit time value expressed as seconds and microseconds since the Epoch
Definition pro.h:503
unsigned char uchar
unsigned 8 bit value
Definition pro.h:341
INLINE THREAD_SAFE qtime64_t make_qtime64(uint32 secs, DEFARG(int32 usecs, 0))
Get a qtime64_t instance from a seconds value and microseconds value.
Definition pro.h:526
THREAD_SAFE void qswap(T &a, T &b)
Swap 2 objects of the same type using memory copies.
Definition pro.h:1728
INLINE THREAD_SAFE uint32 get_secs(qtime64_t t)
Get the 'seconds since the epoch' part of a qtime64_t.
Definition pro.h:508
idaman THREAD_SAFE bool ida_export qmutex_unlock(qmutex_t m)
Unlock a mutex.
idaman THREAD_SAFE bool ida_export qmutex_free(qmutex_t m)
Free a mutex.
idaman THREAD_SAFE bool ida_export qmutex_lock(qmutex_t m)
Lock a mutex.
idaman THREAD_SAFE qmutex_t ida_export qmutex_create(void)
Create a new mutex.
ptrdiff_t ssize_t
Signed size_t - used to check for size overflows when the counter becomes negative.
Definition pro.h:385
unsigned short ushort
unsigned 16 bit value
Definition pro.h:342
INLINE THREAD_SAFE uint32 get_usecs(qtime64_t t)
Get the microseconds part of a qtime64_t.
Definition pro.h:516
void idaapi setflag(T &where, U bit, bool cnd)
Set a 'bit' in 'where' if 'value' is not zero.
Definition pro.h:1530
_qstring< char > qstring
regular string
Definition pro.h:3771
unsigned int
Definition pronet.h:99
utc_timestamp_t start_time
Definition network.hpp:613
qstring privkey
Definition network.hpp:610
void delete_client_handler(network_client_handler_t *inst)
virtual void collect_cliopts(cliopts_t *out, uint32 features)
virtual void shutdown_gracefully(int signum)
virtual ~base_dispatcher_t()
idarpc_stream_t * irs
Definition network.hpp:611
client_handlers_list_t * clients_list
Definition network.hpp:612
qstring certchain
Definition network.hpp:609
bool verbose
Definition network.hpp:616
ushort port_number
Definition network.hpp:614
void install_signal_handlers()
bool use_tls
Definition network.hpp:615
virtual network_client_handler_t * new_client_handler(idarpc_stream_t *_irs)=0
qstring ipv4_address
Definition network.hpp:608
base_dispatcher_t(bool multi_threaded)
Definition network.hpp:579
virtual void lock()
Definition network.hpp:584
std::map< network_client_handler_t *, qthread_t > storage_t
Definition network.hpp:580
storage_t storage
Definition network.hpp:581
virtual void unlock()
Definition network.hpp:585
virtual ~client_handlers_list_t()
Definition network.hpp:583
virtual bool is_multi_threaded() const
Definition network.hpp:586
Definition network.hpp:1060
virtual bool validate(login_credentials_t &cred)=0
dec_credentials_t()
Definition network.hpp:1200
virtual ~dec_credentials_t()
Definition network.hpp:1201
Definition network.hpp:260
void build_connstr(qstring *out, uint32 flags=0) const
Definition network.hpp:362
void clear()
Definition network.hpp:272
endpoint_credentials_t(const qstring &_host, ushort _port)
Definition network.hpp:268
qstring password_override
Definition network.hpp:265
qstring username
Definition network.hpp:261
bool parse_connstr(const qstring &s, uint32 flags=0)
Definition network.hpp:355
static bool parse_connstr(endpoint_credentials_t *out, const qstring &s, uint32 flags=0)
Definition network.hpp:285
qstring build_connstr(uint32 flags=0) const
Definition network.hpp:383
endpoint_credentials_t()
Definition network.hpp:267
exit_handler_t & operator=(const exit_handler_t &r)=delete
virtual ~exit_handler_t()
exit_handler_t(const exit_handler_t &)=delete
virtual void handle(int signum)=0
Definition network.hpp:218
void clear()
Definition network.hpp:225
bool operator==(const host_port_t &r) const
Definition network.hpp:228
qstring connstr(int default_port=0) const
Definition network.hpp:239
host_port_t()
Definition network.hpp:222
qstring host
Definition network.hpp:219
host_port_t(const qstring &_host, ushort _port)
Definition network.hpp:223
ushort port
Definition network.hpp:220
bool is_valid() const
Definition network.hpp:226
void swap(host_port_t &r)
Definition network.hpp:233
idarpc_stream_t * irs
Definition network.hpp:405
irs_cancellable_op_t(idarpc_stream_t *_irs, bool receiving, size_t goal=0)
void inc_progress(size_t progress)
Definition network.hpp:414
T * get(int *out_ms=nullptr, void **out_ud=nullptr) const
Definition network.hpp:439
void reset()
Definition network.hpp:420
int ms
Definition network.hpp:417
bool set(int _ms, T *_cb, void *_ud)
Definition network.hpp:427
irs_cb_info_t()
Definition network.hpp:419
irs_progress_cb_t * cb
Definition network.hpp:415
void * ud
Definition network.hpp:416
Definition network.hpp:454
cancel_connect_cb_info_t cancel_connect_cb_info
Definition network.hpp:458
irs_client_opts_t()
Definition network.hpp:460
endpoint_credentials_t server
Definition network.hpp:456
size_t cb
Definition network.hpp:455
endpoint_credentials_t proxy
Definition network.hpp:457
irs_client_opts_t(const qstring &_host, int _port)
Definition network.hpp:461
Definition network.hpp:468
qstring privkey_path
Definition network.hpp:472
irs_server_opts_t()
Definition network.hpp:474
qstring certchain_path
Definition network.hpp:471
irs_server_opts_t(const qstring &_host, int _port)
Definition network.hpp:475
size_t cb
Definition network.hpp:469
host_port_t bind
Definition network.hpp:470
Definition network.hpp:670
virtual void check_license_type(const licsrv_rpc::license_t &)
Definition network.hpp:671
virtual void check_license_activation(qstring *out_matched_macaddr, const licsrv_rpc::license_t &lic)
Definition network.hpp:676
virtual void print_license_info(const licsrv_rpc::license_t &lic) const
Definition network.hpp:693
virtual void fill_server_info(const product_entry_t &, const qstring &, const qstring &, const qstring &)
Definition network.hpp:683
virtual int on_parse_error(int code)
Definition network.hpp:691
void init(bool set_as_primary=true)
bool is_primary
Definition network.hpp:1184
virtual bool write(qstring *errbuf) const override
virtual ~lumina_credentials_t()
Definition network.hpp:1189
virtual bool do_load_password(qstring *out, qstring *errbuf) const override
lumina_credentials_t()
Definition network.hpp:1186
virtual void unlock() override
Definition network.hpp:597
virtual bool is_multi_threaded() const override
Definition network.hpp:598
mt_client_handlers_list_t()
Definition network.hpp:594
qmutex_t mutex
Definition network.hpp:592
virtual void lock() override
Definition network.hpp:596
virtual ~mt_client_handlers_list_t()
Definition network.hpp:595
Definition network.hpp:543
void close_all_channels()
virtual void shutdown_gracefully(int signum)=0
virtual ~network_client_handler_t()
AS_PRINTF(2, 0) int vlprintf(const char *format
qstring peer_name
Definition network.hpp:546
AS_PRINTF(2, 3) int lprintf(const char *format
utc_timestamp_t session_start
Definition network.hpp:548
const
Definition network.hpp:564
idarpc_stream_t * irs
Definition network.hpp:545
network_client_handler_t(idarpc_stream_t *_irs, bool _verbose)
FILE * channels[16]
Definition network.hpp:544
bool verbose
Definition network.hpp:549
int code
Definition network.hpp:567
int find_free_channel() const
uint32 session_id
Definition network.hpp:547
Definition network.hpp:757
virtual bool deserialize(const uchar **ptr, size_t len, int version)=0
virtual void serialize(bytevec_t *out, int version) const =0
rpc_packet_data_t(uchar _code)
Definition network.hpp:760
uchar code
Definition network.hpp:758
virtual ~rpc_packet_data_t()
Definition network.hpp:761
Definition network.hpp:160
uchar code
Definition network.hpp:162
uint32 length
Definition network.hpp:161
Definition network.hpp:780
rpc_packet_instantiator_t * instantiate
Definition network.hpp:783
uchar code
Definition network.hpp:781
const char * name
Definition network.hpp:782
Definition network.hpp:790
int recv_timeout
Definition network.hpp:792
uchar pkt_code
Definition network.hpp:791
Definition network.hpp:644
qstring log_file_path
Definition network.hpp:646
qstring connection_string
Definition network.hpp:645
qstring config_file_path
Definition network.hpp:648
qstring license_file_path
Definition network.hpp:647
const licsrv_rpc::license_t * read_license_file(license_file_visitor_t &lv) const
bool may_upgrade_schema
Definition network.hpp:710
void check_license_file(license_file_visitor_t &lv) const
void setup_logging_output()
FILE * log_file
Definition network.hpp:707
bool check_license_activation
Definition network.hpp:713
void log_request(const bytevec_t &request, int interr_code=-1) const
bool should_recreate_schema
Definition network.hpp:709
qstring badreqdir
Definition network.hpp:706
void get_license_file_contents(bytevec_t *data) const
virtual void collect_cliopts(cliopts_t *out, uint32 features) override
void maybe_start_recording(recording_rpc_engine_t *e)
server_dispatcher_t(bool _multi_threaded, int default_port, const char *default_license_file_name)
base_dispatcher_t inherited
Definition network.hpp:703
virtual ~server_dispatcher_t()
qstring convdir
Definition network.hpp:711
qstring license_file_name
Definition network.hpp:705
licmgr_logger_t * licmgr_logger
Definition network.hpp:708
virtual ~tlm_credentials_t()
Definition network.hpp:1208
tlm_credentials_t()
Definition network.hpp:1207