(fix) provide correct error response to EAS client when sending big mails (fixes #3956)
parent
1a9b20519e
commit
cdf6aaa53e
|
@ -3166,6 +3166,28 @@ void handle_eas_terminate(int signum)
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/ee218647(v=exchg.80).aspx
|
||||||
|
// for valid status codes.
|
||||||
|
//
|
||||||
|
- (NSData *) _sendMailErrorResponseWithStatus: (int) status
|
||||||
|
{
|
||||||
|
NSMutableString *s;
|
||||||
|
NSData *d;
|
||||||
|
|
||||||
|
s = [NSMutableString string];
|
||||||
|
|
||||||
|
[s appendString: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"];
|
||||||
|
[s appendString: @"<!DOCTYPE ActiveSync PUBLIC \"-//MICROSOFT//DTD ActiveSync//EN\" \"http://www.microsoft.com/\">"];
|
||||||
|
[s appendString: @"<SendMail xmlns=\"ComposeMail:\">"];
|
||||||
|
[s appendFormat: @"<Status>%d</Status>", status];
|
||||||
|
[s appendString: @"</SendMail>"];
|
||||||
|
|
||||||
|
d = [[s dataUsingEncoding: NSUTF8StringEncoding] xml2wbxml];
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -3295,20 +3317,7 @@ void handle_eas_terminate(int signum)
|
||||||
{
|
{
|
||||||
if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 14.0)
|
if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 14.0)
|
||||||
{
|
{
|
||||||
NSMutableString *s;
|
[theResponse setContent: [self _sendMailErrorResponseWithStatus: 120]];
|
||||||
NSData *d;
|
|
||||||
|
|
||||||
s = [NSMutableString string];
|
|
||||||
|
|
||||||
[s appendString: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"];
|
|
||||||
[s appendString: @"<!DOCTYPE ActiveSync PUBLIC \"-//MICROSOFT//DTD ActiveSync//EN\" \"http://www.microsoft.com/\">"];
|
|
||||||
[s appendString: @"<SendMail xmlns=\"ComposeMail:\">"];
|
|
||||||
[s appendString: @"<Status>120</Status>"];
|
|
||||||
[s appendString: @"</SendMail>"];
|
|
||||||
|
|
||||||
d = [[s dataUsingEncoding: NSUTF8StringEncoding] xml2wbxml];
|
|
||||||
|
|
||||||
[theResponse setContent: d];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -4007,9 +4016,17 @@ void handle_eas_terminate(int signum)
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
{
|
{
|
||||||
|
// If we got no data in the SendMail request, that means SOPE rejected it because of the WOMaxUploadSize.
|
||||||
|
// We generate here the proper failed response for SendMail
|
||||||
|
if ([cmdName caseInsensitiveCompare: @"SendMail"] == NSOrderedSame)
|
||||||
|
{
|
||||||
|
[theResponse setHeader: @"application/vnd.ms-sync.wbxml" forKey: @"Content-Type"];
|
||||||
|
[theResponse setContent: [self _sendMailErrorResponseWithStatus: 122]];
|
||||||
|
goto return_response;
|
||||||
|
}
|
||||||
// We check if it's a Ping command with no body.
|
// We check if it's a Ping command with no body.
|
||||||
// See http://msdn.microsoft.com/en-us/library/ee200913(v=exchg.80).aspx for details
|
// See http://msdn.microsoft.com/en-us/library/ee200913(v=exchg.80).aspx for details
|
||||||
if ([cmdName caseInsensitiveCompare: @"Ping"] != NSOrderedSame && [cmdName caseInsensitiveCompare: @"GetAttachment"] != NSOrderedSame && [cmdName caseInsensitiveCompare: @"Sync"] != NSOrderedSame)
|
else if ([cmdName caseInsensitiveCompare: @"Ping"] != NSOrderedSame && [cmdName caseInsensitiveCompare: @"GetAttachment"] != NSOrderedSame && [cmdName caseInsensitiveCompare: @"Sync"] != NSOrderedSame)
|
||||||
{
|
{
|
||||||
RELEASE(context);
|
RELEASE(context);
|
||||||
RELEASE(pool);
|
RELEASE(pool);
|
||||||
|
@ -4047,6 +4064,7 @@ void handle_eas_terminate(int signum)
|
||||||
|
|
||||||
[self performSelector: aSelector withObject: documentElement withObject: theResponse];
|
[self performSelector: aSelector withObject: documentElement withObject: theResponse];
|
||||||
|
|
||||||
|
return_response:
|
||||||
[theResponse setHeader: @"14.1" forKey: @"MS-Server-ActiveSync"];
|
[theResponse setHeader: @"14.1" forKey: @"MS-Server-ActiveSync"];
|
||||||
[theResponse setHeader: @"Sync,SendMail,SmartForward,SmartReply,GetAttachment,GetHierarchy,CreateCollection,DeleteCollection,MoveCollection,FolderSync,FolderCreate,FolderDelete,FolderUpdate,MoveItems,GetItemEstimate,MeetingResponse,Search,Settings,Ping,ItemOperations,ResolveRecipients,ValidateCert" forKey: @"MS-ASProtocolCommands"];
|
[theResponse setHeader: @"Sync,SendMail,SmartForward,SmartReply,GetAttachment,GetHierarchy,CreateCollection,DeleteCollection,MoveCollection,FolderSync,FolderCreate,FolderDelete,FolderUpdate,MoveItems,GetItemEstimate,MeetingResponse,Search,Settings,Ping,ItemOperations,ResolveRecipients,ValidateCert" forKey: @"MS-ASProtocolCommands"];
|
||||||
[theResponse setHeader: @"2.5,12.0,12.1,14.0,14.1" forKey: @"MS-ASProtocolVersions"];
|
[theResponse setHeader: @"2.5,12.0,12.1,14.0,14.1" forKey: @"MS-ASProtocolVersions"];
|
||||||
|
|
Loading…
Reference in New Issue