5a51117afd34153d194ba9d81bd732f7b083f878
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #ifndef BLINKER_PHONE_H
7) #define BLINKER_PHONE_H
8) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

9) #include <map>
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

10) #include <string>
11) 
12) #include "Directory.h"
13) #include "File.h"
14) #include "IoCallee.h"
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

15) #include "ListTracker.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

16) #include "Mgrs.h"
17) #include "Module.h"
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

18) #include "OpConn.h"
19) #include "OpConnIf.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

20) #include "SettingFile.h"
21) #include "Time.h"
22) #include "TimeCallee.h"
23) 
24) namespace Blinker {
25) 
26) /// phone connector (using EBIP)
27) template<typename ADDR, typename SOCK>
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

28) class Phone: public IoCallee, public Module, public OpConnIf, public TimeCallee
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

29) {
30) protected:
31)   /// type for address setting file
32)   typedef SettingFile<ADDR> AddrFile;
33) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

34)   /// extension to be called
35)   class Extension;
36) 
37)   /// extension list tracker
38)   typedef ListTracker<Phone, Extension, Directory> ExtListTracker;
39) 
40)   /// map of extensions to call (extension name  -> module name)
41)   typedef std::map<std::string, std::string> ExtMap;
42) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

43)   /// map from line number to connection
44)   typedef std::map<unsigned int, OpConn *> LineConnMap;
45) 
46)   /// map from connection to line number
47)   typedef std::map<OpConn *, unsigned int> ConnLineMap;
48) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

49) public:
50)   /**
51)    * @brief constructor
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

52)    * @param[in] name module name
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

53)    * @param[in] mgrs managers
54)    * @param[in] dirBase base directory
55)    */
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

56)   Phone(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

57) 
58)   /// virtual destructor
59)   virtual ~Phone();
60) 
61) private:
62)   /// copy constructor disabled
63)   Phone(const Phone &that);
64) 
65)   /// assignment operator disabled
66)   const Phone & operator=(const Phone &that);
67) 
68) public:
69)   /// check for update of configuration
70)   virtual void updateConfig();
71) 
72)   /// callback when requested time reached
73)   virtual void timeCall();
74) 
75)   /**
76)    * @brief callback when I/O object is readable
77)    * @param[in] io I/O object that is readable
78)    */
79)   virtual void ioReadCall(Io *io);
80) 
81)   /**
82)    * @brief callback when I/O object is writable
83)    * @param[in] io I/O object that is writable
84)    */
85)   virtual void ioWriteCall(Io *io);
86) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

87)   /**
88)    * @brief operator connection is closed
89)    * @param[in] pConn operator connection object
90)    */
91)   virtual void opConnClose(OpConn *pConn);
92) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

93) protected:
94)   /// (re-)read server address
95)   void readServer();
96) 
97)   /// create socket and bind it
98)   void createSock();
99) 
100)   /// destroy socket
101)   void destroySock();
102) 
103)   /// register with server
104)   void sendRegister();
105) 
106)   /// send heartbeat to server
107)   void sendHeartbeat();
108) 
Stefan Schuermans accepting EBIP calls works now

Stefan Schuermans authored 12 years ago

109)   /**
110)    * @brief send accept message
111)    * @param[in] line number of line accept on
112)    */
113)   void sendAccept(unsigned int line);
114) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

115)   /**
116)    * @brief send hangup message
117)    * @param[in] line number of line to hangup
118)    */
119)   void sendHangup(unsigned int line);
120) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

121)   /**
122)    * @brief send message to server
123)    * @param[in] msg message to send
124)    */
125)   void send(const std::string &msg);
126) 
127)   /// receive data from socket
128)   void receiveFromSock();
129) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

130)   /**
131)    * @brief process message from server
132)    * @param[in] msg message from server
133)    */
134)   void serverMsg(const std::string &msg);
135) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

136)   /**
137)    * @brief process incoming call
138)    * @param[in] line number of phone line
139)    * @param[in] extension extenstion called (i.e. phone number)
140)    */
141)   void incomingCall(unsigned int line, const std::string &extension);
142) 
143)   /**
144)    * @brief hangup on phone line
145)    * @param[in] line number of phone line
146)    */
147)   void hangup(unsigned int line);
148) 
149)   /**
150)    * @brief key pressed on phone line
151)    * @param[in] line number of phone line
152)    * @param[in] key key that has been pressed
153)    */
154)   void keyPressed(unsigned int line, char key);
155) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

156)   /// update time callback
157)   void updateTimeCallback();
158) 
159) protected:
160)   static const Time m_serverTimeout;
161)   static const Time m_heartbeatInterval;
162) 
163) protected:
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

164)   AddrFile       m_fileBind;       ///< bind address file
165)   AddrFile       m_fileServer;     ///< server address file
166)   ExtListTracker m_extListTracker; ///< extension tracker
167)   SOCK           *m_pSock;         ///< socket to use for sending messages
168)   Time           m_timeRegister;   ///< time to re-register
169)   Time           m_timeHeartbeat;  ///< time to send next heartbeat
170)   ExtMap         m_extMap;         ///< map of extensions to call
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

171)   LineConnMap    m_lineConnMap;    ///< map from line number to connection
172)   ConnLineMap    m_connLineMap;    ///< map from connection to line number