00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __OPAL_CALL_H
00033 #define __OPAL_CALL_H
00034
00035 #ifdef P_USE_PRAGMA
00036 #pragma interface
00037 #endif
00038
00039 #include <opal/buildopts.h>
00040
00041 #include <opal/connection.h>
00042 #include <opal/guid.h>
00043
00044 #include <ptlib/safecoll.h>
00045
00046
00047 class OpalManager;
00048
00049
00064 class OpalCall : public PSafeObject
00065 {
00066 PCLASSINFO(OpalCall, PSafeObject);
00067 public:
00072 OpalCall(
00073 OpalManager & manager
00074 );
00075
00078 ~OpalCall();
00080
00087 void PrintOn(
00088 ostream & strm
00089 ) const;
00091
00096 PBoolean IsEstablished() const { return isEstablished; }
00097
00106 virtual void OnEstablishedCall();
00107
00116 OpalConnection::CallEndReason GetCallEndReason() const { return callEndReason; }
00117
00122 void SetCallEndReason(
00123 OpalConnection::CallEndReason reason
00124 );
00125
00134 void Clear(
00135 OpalConnection::CallEndReason reason = OpalConnection::EndedByLocalUser,
00136 PSyncPoint * sync = NULL
00137 );
00138
00144 virtual void OnCleared();
00146
00154 virtual PBoolean OnSetUp(
00155 OpalConnection & connection
00156 );
00157
00163 virtual PBoolean OnAlerting(
00164 OpalConnection & connection
00165 );
00166
00183 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00184 OpalConnection & connection,
00185 const PString & caller
00186 );
00187
00199 virtual PBoolean OnConnected(
00200 OpalConnection & connection
00201 );
00202
00217 virtual PBoolean OnEstablished(
00218 OpalConnection & connection
00219 );
00220
00226 virtual void OnReleased(
00227 OpalConnection & connection
00228 );
00229
00235 PSafePtr<OpalConnection> GetOtherPartyConnection(
00236 const OpalConnection & connection
00237 ) const;
00238
00241 PSafePtr<OpalConnection> GetConnection(
00242 PINDEX idx,
00243 PSafetyMode mode = PSafeReference
00244 ) { return connectionsActive.GetAt(idx, mode); }
00245
00248 void Hold();
00249
00252 void Retrieve();
00253
00256 bool IsOnHold() const;
00258
00269 virtual OpalMediaFormatList GetMediaFormats(
00270 const OpalConnection & connection,
00271 PBoolean includeSpecifiedConnection
00272 );
00273
00280 virtual bool OpenSourceMediaStreams(
00281 OpalConnection & connection,
00282 unsigned sessionID,
00283 const OpalMediaFormatList & preselectedFormats = OpalMediaFormatList()
00284 );
00285
00290 virtual bool SelectMediaFormats(
00291 unsigned sessionID,
00292 const OpalMediaFormatList & srcFormats,
00293 const OpalMediaFormatList & dstFormats,
00294 const OpalMediaFormatList & allFormats,
00295 OpalMediaFormat & srcFormat,
00296 OpalMediaFormat & dstFormat
00297 ) const;
00298
00306 virtual void OnRTPStatistics(
00307 const OpalConnection & connection,
00308 const RTP_Session & session
00309 );
00310
00313 virtual void CloseMediaStreams();
00314
00317 virtual PBoolean IsMediaBypassPossible(
00318 const OpalConnection & connection,
00319 unsigned sessionID
00320 ) const;
00322
00330 virtual void OnUserInputString(
00331 OpalConnection & connection,
00332 const PString & value
00333 );
00334
00343 virtual void OnUserInputTone(
00344 OpalConnection & connection,
00345 char tone,
00346 int duration
00347 );
00349
00354 OpalManager & GetManager() const { return manager; }
00355
00358 const PString & GetToken() const { return myToken; }
00359
00364 const PString & GetPartyA() const { return partyA; }
00365
00371 const PString & GetPartyB() const { return partyB; }
00372
00378 void SetPartyB(
00379 const PString & b
00380 ) { partyB = b; }
00381
00384 const PTime & GetStartTime() const { return startTime; }
00386
00387 virtual PBoolean StartRecording(const PFilePath & fn);
00388 virtual bool IsRecording() const;
00389 virtual void StopRecording();
00390 void OnStopRecordAudio(const PString & callToken);
00391
00392 protected:
00393 OpalManager & manager;
00394
00395 PString myToken;
00396
00397 PString partyA;
00398 PString partyB;
00399 PTime startTime;
00400 PBoolean isEstablished;
00401 PBoolean isClearing;
00402
00403 OpalConnection::CallEndReason callEndReason;
00404
00405 PSafeList<OpalConnection> connectionsActive;
00406
00407 PSyncPoint * endCallSyncPoint;
00408
00409
00410
00411 friend OpalConnection::OpalConnection(OpalCall &, OpalEndPoint &, const PString &, unsigned int, OpalConnection::StringOptions *);
00412
00413 friend OpalConnection::~OpalConnection();
00414 };
00415
00416
00417 #endif // __OPAL_CALL_H
00418
00419
00420