media: mux RTP and RTCP when using TCP connection
[siplcs.git] / src / adium / ESSIPEService.m
blob3f62a2f48b97e5ecd46f13afcb9588c013280fa4
1 //
2 //  ESSIPEService.m
3 //  SIPEAdiumPlugin
4 //
5 //  Created by Matt Meissner on 10/30/09.
6 //  Modified by Michael Lamb on 2/27/13
7 //  Copyright 2013 Michael Lamb/Harris Kauffman. All rights reserved.
8 //  Copyright (C) 2014 SIPE Project <http://sipe.sourceforge.net/>
9 //
11 #import <AIUtilities/AICharacterSetAdditions.h>
12 #import <AIUtilities/AIImageAdditions.h>
13 #import <Adium/AIStatusControllerProtocol.h>
14 #import <AISharedAdium.h>
16 #import "DCPurpleSIPEJoinChatViewController.h"
17 #import "ESSIPEAccountViewController.h"
18 #import "ESPurpleSIPEAccount.h"
19 #import "ESSIPEService.h"
21 @implementation ESSIPEService
23 #pragma mark Account/Chat Creation
24 - (Class)accountClass
26         return [ESPurpleSIPEAccount class];
29 - (AIAccountViewController *)accountViewController{
30     return [ESSIPEAccountViewController accountViewController];
33 - (DCJoinChatViewController *)joinChatView{
34         return [DCPurpleSIPEJoinChatViewController joinChatView];
37 - (BOOL)canCreateGroupChats{
38         return YES;
41 #pragma mark Service Description Metadata
42 - (NSString *)serviceCodeUniqueID{
43     return @"libpurple-SIPE";
46 - (NSString *)serviceID{
47     return @"SIPE";
50 - (NSString *)serviceClass{
51         return @"SIPE";
54 - (NSString *)shortDescription{
55     return @"OCS";
58 - (NSString *)longDescription{
59     return @"Office Communicator";
62 - (BOOL)caseSensitive{
63         return NO;
65 - (AIServiceImportance)serviceImportance{
66         return AIServiceSecondary;
69 // Some auth schemes may not need a password
70 - (BOOL)requiresPassword{
71         return NO;
74 - (NSImage *)defaultServiceIconOfType:(AIServiceIconType)iconType {
75         NSImage *baseImage = [NSImage imageNamed:@"sipe" forClass:[self class]];
77         if ((iconType == AIServiceIconSmall) || (iconType == AIServiceIconList)) { 
78         [baseImage setSize:NSMakeSize(16, 16)];
79         }
81         return baseImage;
85 #pragma mark Service Properties
86 - (NSCharacterSet *)allowedCharacters
88         NSMutableCharacterSet *allowedCharacters = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
89         NSCharacterSet *returnSet;
91         //
92         // NOTE: needs to be in sync with sipe-utils.c:escape_uri_part()
93         //
94         // @     -   XXX@YYY
95         // :     -   sip:XXX@YYY
96         // ._-~  -   unreserved, see RFC 3986 Appendix A
97         //
98         [allowedCharacters addCharactersInString:@"@:._-~"];
99         returnSet = [allowedCharacters immutableCopy];
100     [allowedCharacters release];
101     
102         return [returnSet autorelease];
105 #pragma mark Statuses
106 - (void)registerStatuses{
107     
108     NSNumber *awayStatus, *availableStatus, *invisibleStatus, *offlineStatus;
109     
110     awayStatus = [NSNumber numberWithInt:AIAwayStatusType];
111     availableStatus = [NSNumber numberWithInt:AIAvailableStatusType];
112     invisibleStatus = [NSNumber numberWithInt:AIInvisibleStatusType];
113     offlineStatus = [NSNumber numberWithInt:AIOfflineStatusType];
114     
115     NSDictionary *statuses =
116     [NSDictionary dictionaryWithObjectsAndKeys:
117      availableStatus, STATUS_NAME_AVAILABLE,
118      awayStatus,      STATUS_NAME_AWAY,
119      awayStatus,      STATUS_NAME_BUSY,
120      invisibleStatus, STATUS_NAME_INVISIBLE,
121      awayStatus,      STATUS_NAME_BRB,
122      awayStatus,      STATUS_NAME_DND,
123      awayStatus,      STATUS_NAME_LUNCH,
124      offlineStatus,   STATUS_NAME_OFFLINE,
125      awayStatus,      STATUS_NAME_PHONE,
126      awayStatus,      STATUS_NAME_NOT_AT_DESK,
127      awayStatus,      STATUS_NAME_NOT_IN_OFFICE,
128      awayStatus,      STATUS_NAME_AWAY_FRIENDS_ONLY,
129      nil
130      ];
132     for (NSString* key in statuses) {
133         AIStatusType value = [[statuses objectForKey:key] intValue];
135         [adium.statusController
136          registerStatus:key
137          withDescription:[adium.statusController localizedDescriptionForCoreStatusName:key]
138          ofType:value
139          forService:self
140          ];
141     }
145 @end