summaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/smpp_smsc.h
blob: 500fbc35a8fd6f780806505c54b1306fcfc43384 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef _SMPP_SMSC_H
#define _SMPP_SMSC_H

#include <sys/socket.h>
#include <netinet/in.h>

#include <osmocom/core/utils.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/write_queue.h>

#include <smpp34.h>
#include <smpp34_structs.h>
#include <smpp34_params.h>

enum esme_read_state {
	READ_ST_IN_LEN = 0,
	READ_ST_IN_MSG = 1,
};

struct osmo_esme {
	struct llist_head list;
	struct smsc *smsc;

	struct osmo_wqueue wqueue;
	struct sockaddr_storage sa;
	socklen_t sa_len;

	enum esme_read_state read_state;
	uint32_t read_len;
	uint32_t read_idx;
	struct msgb *read_msg;

	uint8_t smpp_version;
	char system_id[16+1];

	uint8_t bind_flags;
};

struct smsc {
	struct osmo_fd listen_ofd;
	struct llist_head esme_list;
	char system_id[16+1];
	void *priv;
};


int smpp_smsc_init(struct smsc *smsc, uint16_t port);

int handle_smpp_submit(struct osmo_esme *esme, struct submit_sm_t *submit,
			struct submit_sm_resp_t *submit_r);

#endif