2010-09-20 19:44:17 -05:00
|
|
|
//
|
|
|
|
// MGMSIP.h
|
|
|
|
// VoiceBase
|
|
|
|
//
|
|
|
|
// Created by Mr. Gecko on 9/10/10.
|
2011-03-07 19:02:53 -06:00
|
|
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
|
|
|
//
|
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
|
|
// with or without fee is hereby granted, provided that the above copyright notice
|
|
|
|
// and this permission notice appear in all copies.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
|
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
|
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
|
|
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
|
|
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
|
|
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
2010-09-20 19:44:17 -05:00
|
|
|
//
|
|
|
|
|
|
|
|
#if MGMSIPENABLED
|
2011-03-21 07:43:56 -05:00
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#if !TARGET_OS_IPHONE
|
2010-09-30 12:27:22 -05:00
|
|
|
#import <SystemConfiguration/SystemConfiguration.h>
|
2010-09-24 12:46:38 -05:00
|
|
|
#endif
|
2010-09-20 19:44:17 -05:00
|
|
|
#import <pjsua-lib/pjsua.h>
|
|
|
|
|
|
|
|
@class MGMSIPAccount, MGMSIPCall;
|
|
|
|
|
|
|
|
extern NSString * const MGMSIPOutboundProxy;
|
|
|
|
extern NSString * const MGMSIPOutboundProxyPort;
|
|
|
|
extern NSString * const MGMSIPSTUN;
|
|
|
|
extern NSString * const MGMSIPSTUNPort;
|
|
|
|
extern NSString * const MGMSIPLogFile;
|
|
|
|
extern NSString * const MGMSIPLogLevel;
|
|
|
|
extern NSString * const MGMSIPConsoleLogLevel;
|
|
|
|
extern NSString * const MGMSIPVoiceActivityDetection;
|
|
|
|
extern NSString * const MGMSIPInteractiveConnectivityEstablishment;
|
|
|
|
extern NSString * const MGMSIPNameServersEnabled;
|
|
|
|
extern NSString * const MGMSIPEchoCacnellationEnabled;
|
|
|
|
extern NSString * const MGMSIPPort;
|
|
|
|
extern NSString * const MGMSIPPublicAddress;
|
2011-02-22 12:00:36 -06:00
|
|
|
extern NSString * const MGMSIPUserAgent;
|
2011-03-21 07:43:56 -05:00
|
|
|
extern NSString * const MGMSIPCodec;
|
2010-09-20 19:44:17 -05:00
|
|
|
|
|
|
|
extern NSString * const MGMNetworkConnectedNotification;
|
|
|
|
extern NSString * const MGMNetworkDisconnectedNotification;
|
|
|
|
|
|
|
|
extern NSString * const MGMSIPVolume;
|
|
|
|
extern NSString * const MGMSIPMicVolume;
|
|
|
|
extern NSString * const MGMSIPVolumeChangedNotification;
|
|
|
|
extern NSString * const MGMSIPMicVolumeChangedNotification;
|
|
|
|
|
|
|
|
extern NSString * const MGMSIPADeviceIdentifier;
|
|
|
|
extern NSString * const MGMSIPADeviceIndex;
|
|
|
|
extern NSString * const MGMSIPADeviceUID;
|
|
|
|
extern NSString * const MGMSIPADeviceName;
|
|
|
|
extern NSString * const MGMSIPADeviceInputCount;
|
|
|
|
extern NSString * const MGMSIPADeviceOutputCount;
|
|
|
|
extern NSString * const MGMSIPADeviceIsDefaultInput;
|
|
|
|
extern NSString * const MGMSIPADeviceIsDefaultOutput;
|
|
|
|
|
|
|
|
extern NSString * const MGMSIPACurrentInputDevice;
|
|
|
|
extern NSString * const MGMSIPACurrentOutputDevice;
|
|
|
|
extern NSString * const MGMSIPASystemDefault;
|
|
|
|
extern NSString * const MGMSIPAudioChangedNotification;
|
|
|
|
|
|
|
|
@protocol MGMSIPDelegate <NSObject>
|
|
|
|
- (void)SIPStarted;
|
|
|
|
- (void)SIPStopped;
|
|
|
|
- (void)accountLoggedIn:(MGMSIPAccount *)theAccount;
|
|
|
|
- (void)accountLoggedOut:(MGMSIPAccount *)theAccount;
|
|
|
|
- (void)receivedNewCall:(MGMSIPCall *)theCall;
|
|
|
|
- (void)startingNewCall:(MGMSIPCall *)theCall;
|
|
|
|
- (void)gotNewCall:(MGMSIPCall *)theCall;
|
|
|
|
@end
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
MGMSIPNULLState = -1,
|
|
|
|
MGMSIPStoppedState = 0,
|
|
|
|
MGMSIPStartingState = 1,
|
|
|
|
MGMSIPStartedState = 2,
|
|
|
|
MGMSIPStoppingState = 3
|
|
|
|
} MGMSIPState;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
MGMSIPNATUnknownType = PJ_STUN_NAT_TYPE_UNKNOWN,
|
|
|
|
MGMSIPNATErrorUnknownType = PJ_STUN_NAT_TYPE_ERR_UNKNOWN,
|
|
|
|
MGMSIPNATOpen = PJ_STUN_NAT_TYPE_OPEN,
|
|
|
|
MGMSIPNATBlocked = PJ_STUN_NAT_TYPE_BLOCKED,
|
|
|
|
MGMSIPNATSymmetricUDP = PJ_STUN_NAT_TYPE_SYMMETRIC_UDP,
|
|
|
|
MGMSIPNATFullCone = PJ_STUN_NAT_TYPE_FULL_CONE,
|
|
|
|
MGMSIPNATSymmetric = PJ_STUN_NAT_TYPE_SYMMETRIC,
|
|
|
|
MGMSIPNATRestricted = PJ_STUN_NAT_TYPE_RESTRICTED,
|
|
|
|
MGMSIPNATPortRestricted = PJ_STUN_NAT_TYPE_PORT_RESTRICTED
|
|
|
|
} MGMSIPNATType;
|
|
|
|
|
|
|
|
@interface MGMSIP : NSObject {
|
|
|
|
id<MGMSIPDelegate> delegate;
|
|
|
|
NSLock *lock;
|
|
|
|
MGMSIPState state;
|
|
|
|
|
|
|
|
pj_pool_t *PJPool;
|
|
|
|
int port;
|
2010-10-12 00:53:17 -05:00
|
|
|
pjsua_media_config mediaConfig;
|
2010-09-20 19:44:17 -05:00
|
|
|
pjmedia_port *ringbackPort;
|
|
|
|
pjsua_conf_port_id ringbackSlot;
|
|
|
|
pjsua_transport_id UDPTransport;
|
2010-10-16 20:32:55 -05:00
|
|
|
pjsua_acc_id UDPAccount;
|
2010-09-20 19:44:17 -05:00
|
|
|
pjsua_transport_id TCPTransport;
|
2010-10-16 20:32:55 -05:00
|
|
|
pjsua_acc_id TCPAccount;
|
2010-09-20 19:44:17 -05:00
|
|
|
MGMSIPNATType NATType;
|
|
|
|
|
|
|
|
BOOL shouldRestart;
|
|
|
|
NSTimer *restartTimer;
|
|
|
|
|
2011-03-21 07:43:56 -05:00
|
|
|
unsigned int codecOriginalPriority;
|
|
|
|
NSMutableDictionary *codecsInfo;
|
|
|
|
|
2010-09-20 19:44:17 -05:00
|
|
|
NSMutableArray *accounts;
|
|
|
|
NSMutableArray *restartAccounts;
|
2010-09-24 12:46:38 -05:00
|
|
|
#if !TARGET_OS_IPHONE
|
2010-09-20 19:44:17 -05:00
|
|
|
NSArray *audioDevices;
|
2010-10-02 22:00:01 -05:00
|
|
|
int lastInputDevice;
|
|
|
|
int lastOutputDevice;
|
2010-09-24 12:46:38 -05:00
|
|
|
#endif
|
2010-09-20 19:44:17 -05:00
|
|
|
|
|
|
|
int ringbackCount;
|
|
|
|
|
2010-09-30 12:27:22 -05:00
|
|
|
#if !TARGET_OS_IPHONE
|
2010-09-20 19:44:17 -05:00
|
|
|
SCDynamicStoreRef store;
|
|
|
|
CFRunLoopSourceRef storeRunLoop;
|
2010-09-30 12:27:22 -05:00
|
|
|
#endif
|
2010-09-20 19:44:17 -05:00
|
|
|
}
|
|
|
|
+ (MGMSIP *)sharedSIP;
|
|
|
|
|
|
|
|
- (void)registerDefaults;
|
|
|
|
|
|
|
|
- (id<MGMSIPDelegate>)delegate;
|
|
|
|
- (void)setDelegate:(id)theDelegate;
|
|
|
|
|
|
|
|
- (MGMSIPState)state;
|
|
|
|
- (BOOL)isStarted;
|
|
|
|
- (pj_pool_t *)PJPool;
|
|
|
|
- (int)port;
|
|
|
|
- (void)setPort:(int)thePort;
|
2010-10-12 00:53:17 -05:00
|
|
|
- (pjsua_media_config)mediaConfig;
|
2010-09-20 19:44:17 -05:00
|
|
|
- (pjmedia_port *)ringbackPort;
|
|
|
|
- (pjsua_conf_port_id)ringbackSlot;
|
2010-10-16 20:32:55 -05:00
|
|
|
- (pjsua_transport_id)UDPTransport;
|
|
|
|
- (pjsua_acc_id)UDPAccount;
|
|
|
|
- (pjsua_transport_id)TCPTransport;
|
|
|
|
- (pjsua_acc_id)TCPAccount;
|
2010-09-20 19:44:17 -05:00
|
|
|
- (MGMSIPNATType)NATType;
|
|
|
|
- (void)setNATType:(MGMSIPNATType)theNATType;
|
|
|
|
|
|
|
|
- (void)start;
|
|
|
|
- (void)stop;
|
|
|
|
- (void)restart;
|
2010-09-24 15:35:47 -05:00
|
|
|
- (void)computerSleep;
|
|
|
|
- (void)computerWake;
|
2010-09-20 19:44:17 -05:00
|
|
|
|
2010-10-16 20:32:55 -05:00
|
|
|
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
|
|
|
|
- (void)keepAlive;
|
|
|
|
#endif
|
|
|
|
|
2010-09-21 20:47:54 -05:00
|
|
|
- (void)registerThread:(pj_thread_desc *)thePJThreadDesc;
|
2010-09-20 19:44:17 -05:00
|
|
|
|
2011-03-21 07:43:56 -05:00
|
|
|
- (void)setTopCodec:(NSString *)theCodec;
|
|
|
|
- (void)setPriority:(unsigned int)thePriority forCodec:(NSString *)theCodec;
|
|
|
|
- (NSDictionary *)codecs;
|
|
|
|
|
2010-09-20 19:44:17 -05:00
|
|
|
- (void)loginToAccount:(MGMSIPAccount *)theAccount;
|
|
|
|
- (void)logoutOfAccount:(MGMSIPAccount *)theAccount;
|
|
|
|
|
|
|
|
- (NSArray *)accounts;
|
2010-10-16 20:32:55 -05:00
|
|
|
- (pjsua_acc_id)accountIDForUserName:(NSString *)theUserName;
|
|
|
|
- (MGMSIPAccount *)accountWithIdentifier:(pjsua_acc_id)theIdentifier;
|
2010-09-20 19:44:17 -05:00
|
|
|
|
|
|
|
- (int)ringbackCount;
|
|
|
|
- (void)setRingbackCount:(int)theRingbackCount;
|
|
|
|
|
|
|
|
- (void)hangUpAllCalls;
|
|
|
|
|
|
|
|
- (float)volume;
|
|
|
|
- (void)setVolume:(float)theVolume;
|
|
|
|
- (float)micVolume;
|
|
|
|
- (void)setMicVolume:(float)theVolume;
|
|
|
|
|
2010-09-24 12:46:38 -05:00
|
|
|
#if !TARGET_OS_IPHONE
|
2010-09-20 19:44:17 -05:00
|
|
|
- (BOOL)setInputSoundDevice:(int)theInputDevice outputSoundDevice:(int)theOutputDevice;
|
2010-09-27 08:10:24 -05:00
|
|
|
- (BOOL)stopAudio;
|
2010-09-20 19:44:17 -05:00
|
|
|
- (void)updateAudioDevices;
|
|
|
|
- (NSArray *)audioDevices;
|
2010-09-24 12:46:38 -05:00
|
|
|
#endif
|
2010-09-20 19:44:17 -05:00
|
|
|
|
|
|
|
- (void)receivedNewCall:(MGMSIPCall *)theCall;
|
|
|
|
- (void)startingNewCall:(MGMSIPCall *)theCall;
|
|
|
|
- (NSArray *)calls;
|
2010-10-16 20:32:55 -05:00
|
|
|
- (MGMSIPCall *)callWithIdentifier:(pjsua_call_id)theIdentifier;
|
2010-09-20 19:44:17 -05:00
|
|
|
@end
|
|
|
|
#endif
|