Telephony Stack

Contents

Telephony stack definitions relavent to Cell Broadcast support

definitions from /usr/lib/libisi.so.1.4.0

struct isi_client_t {
	void *clientptr; //opaque pointer
	int unk; //unknown
};
struct comm_channel_info_t {
	void *commptrs; //opaque pointer
};
struct callbacks {
	void *func1; //function pointer, unknown prototype
	void *unk1;
	void *unk2;
	void *func2; //function pointer, unknown prototype
	void *func3; //function pointer, unknown prototype
	void *func4; //function pointer, unknown prototype
};

void isi_client_cancel_timeout(isi_client_t *self);
void isi_client_cleanup(isi_client_t *self);
void isi_client_run(isi_client_t *self);
int isi_client_init(isi_client_t *self, callbacks *callbackptrs, comm_channel_info_t *cinfo, int channel);
void isi_client_set_timeout(isi_client_t *self, int timeout);
void isi_client_start(isi_client_t *self);
void isi_client_stop(isi_client_t *self);
void socket_cinfo_init(comm_channel_info_t *cinfo);
int isi_client_sendto_resource(isi_client_t *self, void *buffer, char unknown, char resource);
int isi_client_process_isi_version_resp(isi_client_t *self, int version);
int isi_client_subscribe_indications(isi_client_t *self, char unknown, void *data, signed int size);
int isi_client_cancel_indications(isi_client_t *self, char unknown);
int sb_id_get(void *buf);
int sb_length_get(void *buf);
void *msgbuf_init(void *buffer, unsigned int size, int unknown);
void *msgbuf_add_ptr(void *buffer, unsigned int size);
void *msgbuf_get_ptr(void *buffer, unsigned int size);

pn_route_subscribe //definition not identified yet
pn_route_unsubscribe //definition not identified yet

definitions from /usr/sbin/csd

struct CSDResourceContext {
	int unknown;
	DBusConnection *connection;
	DBusPreallocatedSend *send;
	DBusMessage *message;
};

struct CSDObject { //guessed definition, not sure about the size or layout of this one
	int unknown;
	char *path;
	int unknown2;
	int unknown3;
	int unknown4;
};

struct CSDPlugin { //size may be wrong
	char *name;
	void *configure; //function pointer, unknown prototype	
	void *start; //function pointer, unknown prototype	
	void *stop; //function pointer, unknown prototype	
	int unknown1;
	int unknown2;
	int unknown3;
	int unknown4;
};

int csd_dbus_error(DBusError *error, const char *format, const char *name);
void csd_dbus_free_resource_context(CSDResourceContext *context);
unsigned int csd_dbus_register_object(DBusConnection *connection, CSDObject *object);
unsigned int csd_dbus_unregister_object(DBusConnection *connection, CSDObject *object);
void csd_dbus_save_resource_context(CSDResourceContext *context1, CSDResourceContext *context2)
void csd_dbus_send_message(CSDResourceContext *context);
DBusConnection *csd_get_dbus_connection();
void csd_service_started(const char **bus);
void csd_service_stopped(const char **bus, char *service);

csd_dbus_introspectable_interface //a pointer to an unknown data structure

All csd plugins export a function install which looks like this:
CSDPlugin *install();

libsms.so.0 notes

Functions sms_gsm_cb_routing_ntf, sms_gsm_cb_routing_req and sms_gsm_cb_routing_resp may also be of value for Cell Broadcast. Analysis of libsms.so.0 and libcsd-sms.so may reveal just how high up the stack the Cell Broadcast support goes and how much work is needed to make it work (references exist in libsms.so.0 to strings like "Incoming cell broadcast" so libsms.so.0 at least must be doing something with cell broadcast messages. Unclear what libsms.so.0 is doing with those messages or whether libcsd-sms.so is doing anything with them (and what has to be done at the higher levels to get working CBSMS support)