ims_mgr.h
4.11 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* CC/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _IVR_IMS_MGR_H_
#define _IVR_IMS_MGR_H_
#include "ims_struct.h"
#include "ims_info.h"
#include <common.h>
class ims_mgr_t {
typedef std::map<uint32_t, ims_info> ims_map;
typedef bgcc::Mutex mutex_t;
private:
ims_mgr_t();
~ims_mgr_t();
public:
// singleton object
static ims_mgr_t* get_instance();
public:
// add a new ims, if existed an ims with same imsno, will update ims info
int32_t add_ims(const ims_info_t& ims);
// remove the ims from map
int32_t del_ims(uint32_t ims_no);
// set main ims no
int32_t set_default_ims(uint32_t imsno);
// get main ims no
uint32_t get_default_ims() const;
// set next ims as main ims
int32_t switch_default_ims();
// get callback service
bgcc::ServiceManager* getCallbackService();
public:
// ims operations (using main ims)
// create_session
int32_t create_session(const std::string& callsource, const std::string& channel_id,
const std::string& channel_name,
const std::string& oricalled, ims_session_id_t& imssid, uint32_t& imsno);
// route request: request agent
int32_t route_request(uint32_t imsno, ims_session_id_t imssid, ims_routerequest_id_t& requestid,
ims_servicetype_t destService,
int32_t timeout, int32_t valid_time, ims_routerequest_type_t reqType, const std::string& reqArgs,
int32_t level, const std::string& caller_uri, const std::string& callee_uri,
const std::string& buffer);
// cancel request agent
int32_t cancel_route_request(uint32_t imsno, ims_session_id_t imssid,
ims_routerequest_id_t requestId);
// trans agent
int32_t trans_agent(uint32_t imsno, ims_session_id_t sessionid, ims_routerequest_id_t requestid,
ims_transtype_t transType);
// set associate data
int32_t set_associatedata(uint32_t imsno, ims_session_id_t sessionid, const string& key,
const string& value);
// get associate data of given key
int32_t get_associatedata(uint32_t imsno, ims_session_id_t sessionid, const string& key,
string& value);
int32_t makecall(uint32_t imsno, const std::string& caller, const std::string& callee,
const std::string& showani,
const std::string& showdest, int32_t timeout, int32_t callmode, ims_session_id_t& imssid);
protected:
// if _default_ims == imsno, switch to next ims
// else some one have switch it, do nothing
int32_t _switch_default_ims(uint32_t imsno);
private:
bool is_ims_valid() const;
// switch to next ims, make sure _imsinfo.size() != 0
void _switch_default_ims();
// using given imsno, return matched ims
int32_t _get_ims(uint32_t imsno, ims_info& ims);
// check ims call result, if ok, return IVR_SUCCESS
int32_t _check_result(ims_ccresult_t retcode, int32_t proxy_code, const std::string& info);
public:
// binding ims_sessiond_id and ivr_session_id
void bind_session_id(ims_session_id_t imssid, ivr_session_id_t ivrsid);
void unbind_session_id(ivr_session_id_t ivrsid);
bool get_map_session_id(ims_session_id_t imssid, ivr_session_id_t& ivrsid);
public:
// swap
//void swap(ims_map& other_imsinfo);
protected:
ims_map _imsinfo;
uint32_t _default_ims;
mutex_t _info_mutex;
std::map<ims_session_id_t, ivr_session_id_t> _session_map;
bgcc::ServiceManager _event_sm;
};
#endif