forked from mirrors/linphone-iphone
134 lines
3.3 KiB
C
134 lines
3.3 KiB
C
/*
|
|
linphone
|
|
Copyright (C) 2012 Belledonne Communications, Grenoble, France
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
#include "sal_impl.h"
|
|
#include "sal/sal.h"
|
|
|
|
SalReason _sal_reason_from_sip_code(int code) {
|
|
if (code>=100 && code<300) return SalReasonNone;
|
|
|
|
switch(code) {
|
|
case 0:
|
|
return SalReasonIOError;
|
|
case 301:
|
|
return SalReasonMovedPermanently;
|
|
case 302:
|
|
return SalReasonRedirect;
|
|
case 401:
|
|
case 407:
|
|
return SalReasonUnauthorized;
|
|
case 403:
|
|
return SalReasonForbidden;
|
|
case 404:
|
|
return SalReasonNotFound;
|
|
case 408:
|
|
return SalReasonRequestTimeout;
|
|
case 410:
|
|
return SalReasonGone;
|
|
case 415:
|
|
return SalReasonUnsupportedContent;
|
|
case 422:
|
|
ms_error ("422 not implemented yet");;
|
|
break;
|
|
case 480:
|
|
return SalReasonTemporarilyUnavailable;
|
|
case 481:
|
|
return SalReasonNoMatch;
|
|
case 484:
|
|
return SalReasonAddressIncomplete;
|
|
case 486:
|
|
return SalReasonBusy;
|
|
case 487:
|
|
return SalReasonNone;
|
|
case 488:
|
|
return SalReasonNotAcceptable;
|
|
case 491:
|
|
return SalReasonRequestPending;
|
|
case 500:
|
|
return SalReasonInternalError;
|
|
case 501:
|
|
return SalReasonNotImplemented;
|
|
case 502:
|
|
return SalReasonBadGateway;
|
|
case 503:
|
|
return SalReasonServiceUnavailable;
|
|
case 504:
|
|
return SalReasonServerTimeout;
|
|
case 600:
|
|
return SalReasonDoNotDisturb;
|
|
case 603:
|
|
return SalReasonDeclined;
|
|
default:
|
|
return SalReasonUnknown;
|
|
}
|
|
return SalReasonUnknown;
|
|
}
|
|
|
|
const SalErrorInfo *sal_error_info_none(void){
|
|
static const SalErrorInfo none = {
|
|
SalReasonNone,
|
|
(char *)"Ok",
|
|
200,
|
|
NULL,
|
|
NULL
|
|
};
|
|
return &none;
|
|
}
|
|
|
|
void sal_error_info_reset(SalErrorInfo *ei){
|
|
if (ei->status_string){
|
|
ms_free(ei->status_string);
|
|
ei->status_string=NULL;
|
|
}
|
|
if (ei->warnings){
|
|
ms_free(ei->warnings);
|
|
ei->warnings=NULL;
|
|
|
|
}
|
|
if (ei->full_string){
|
|
ms_free(ei->full_string);
|
|
ei->full_string=NULL;
|
|
}
|
|
if (ei->protocol){
|
|
ms_free(ei->protocol);
|
|
ei->protocol = NULL;
|
|
}
|
|
ei->protocol_code=0;
|
|
ei->reason=SalReasonNone;
|
|
ei->sub_sei = NULL;
|
|
}
|
|
|
|
void sal_error_info_set(SalErrorInfo *ei, SalReason reason, const char *protocol, int code, const char *status_string, const char *warning){
|
|
sal_error_info_reset(ei);
|
|
if (reason==SalReasonUnknown && strcmp(protocol, "SIP") == 0 && code != 0) ei->reason=_sal_reason_from_sip_code(code);
|
|
else{
|
|
ei->reason=reason;
|
|
if (code == 0) {
|
|
code = LinphonePrivate::to_sip_code(reason);
|
|
}
|
|
}
|
|
ei->protocol_code=code;
|
|
ei->status_string=status_string ? ms_strdup(status_string) : NULL;
|
|
ei->warnings=warning ? ms_strdup(warning) : NULL;
|
|
ei->protocol = protocol ? ms_strdup(protocol) : NULL;
|
|
if (ei->status_string){
|
|
if (ei->warnings)
|
|
ei->full_string=ms_strdup_printf("%s %s",ei->status_string,ei->warnings);
|
|
else ei->full_string=ms_strdup(ei->status_string);
|
|
}
|
|
}
|