Fix #245: "Unable to resolve DNS SRV record" error when joining conference
[siplcs.git] / src / adium / ESSIPEService.m
blob065c809ccff271bcd4de9283d4d9b8d3d4a73234
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];
101         return [returnSet autorelease];
104 #pragma mark Statuses
105 - (void)registerStatuses{
106     NSDictionary *statuses =
107     [NSDictionary dictionaryWithObjectsAndKeys:
108      AIAvailableStatusType, STATUS_NAME_AVAILABLE,
109      AIAwayStatusType,      STATUS_NAME_AWAY,
110      AIAwayStatusType,      STATUS_NAME_BUSY,
111      AIInvisibleStatusType, STATUS_NAME_INVISIBLE,
112      AIAwayStatusType,      STATUS_NAME_BRB,
113      AIAwayStatusType,      STATUS_NAME_DND,
114      AIAwayStatusType,      STATUS_NAME_LUNCH,
115      AIOfflineStatusType,   STATUS_NAME_OFFLINE,
116      AIAwayStatusType,      STATUS_NAME_PHONE,
117      AIAwayStatusType,      STATUS_NAME_NOT_AT_DESK,
118      AIAwayStatusType,      STATUS_NAME_NOT_IN_OFFICE,
119      AIAwayStatusType,      STATUS_NAME_AWAY_FRIENDS_ONLY,
120      nil
121      ];
123     for (NSString* key in statuses) {
124         AIStatusType value = [statuses objectForKey:key];
126         [adium.statusController
127          registerStatus:key
128          withDescription:[adium.statusController localizedDescriptionForCoreStatusName:key]
129          ofType:value
130          forService:self
131          ];
132     }
136 @end