** msSOSDispatch() is the entry point for SOS requests. ** - If this is a valid request then it is processed and MS_SUCCESS is returned ** on success, or MS_FAILURE on failure. */
| 2849 | ** on success, or MS_FAILURE on failure. |
| 2850 | */ |
| 2851 | int msSOSDispatch(mapObj *map, cgiRequestObj *req, owsRequestObj *ows_request) { |
| 2852 | #if defined(USE_SOS_SVR) && defined(USE_LIBXML2) |
| 2853 | int returnvalue = MS_DONE; |
| 2854 | sosParamsObj *paramsObj = (sosParamsObj *)calloc(1, sizeof(sosParamsObj)); |
| 2855 | |
| 2856 | if (msSOSParseRequest(map, req, paramsObj) == MS_FAILURE) |
| 2857 | return MS_FAILURE; |
| 2858 | |
| 2859 | /* SERVICE must be specified and be SOS */ |
| 2860 | if (paramsObj->pszService && strcasecmp(paramsObj->pszService, "SOS") == 0) { /* this is an SOS request */ |
| 2861 | if (!paramsObj->pszRequest) { |
| 2862 | msSetError(MS_SOSERR, "Missing REQUEST Parameter", "msSOSDispatch()"); |
| 2863 | msSOSFreeParamsObj(paramsObj); |
| 2864 | free(paramsObj); |
| 2865 | paramsObj = NULL; |
| 2866 | return msSOSException(map, "request", "MissingParameterValue"); |
| 2867 | } |
| 2868 | |
| 2869 | msOWSRequestLayersEnabled(map, "S", paramsObj->pszRequest, ows_request); |
| 2870 | if (ows_request->numlayers == 0) |
| 2871 | { |
| 2872 | msSetError(MS_SOSERR, "SOS request not enabled. Check sos/ows_enable_request settings.", "msSOSDispatch()"); |
| 2873 | msSOSFreeParamsObj(paramsObj); |
| 2874 | free(paramsObj); |
| 2875 | paramsObj = NULL; |
| 2876 | return msSOSException(map, "request", "InvalidParameterValue"); |
| 2877 | } |
| 2878 | |
| 2879 | if (strcasecmp(paramsObj->pszRequest, "GetCapabilities") == 0) { |
| 2880 | returnvalue = msSOSGetCapabilities(map, paramsObj, req, ows_request); |
| 2881 | msSOSFreeParamsObj(paramsObj); |
| 2882 | free(paramsObj); |
| 2883 | paramsObj = NULL; |
| 2884 | return returnvalue; |
| 2885 | } |
| 2886 | |
| 2887 | else if (strcasecmp(paramsObj->pszRequest, "DescribeSensor") == 0 || |
| 2888 | strcasecmp(paramsObj->pszRequest, "GetObservation") == 0 || |
| 2889 | strcasecmp(paramsObj->pszRequest, "DescribeObservationType") == 0 |
| 2890 | ) { |
| 2891 | /* check version */ |
| 2892 | if (!paramsObj->pszVersion) { |
| 2893 | msSetError(MS_SOSERR, "Missing VERSION parameter", "msSOSDispatch()"); |
| 2894 | msSOSFreeParamsObj(paramsObj); |
| 2895 | free(paramsObj); |
| 2896 | paramsObj = NULL; |
| 2897 | return msSOSException(map, "version", "MissingParameterValue"); |
| 2898 | } |
| 2899 | |
| 2900 | if (msOWSParseVersionString(paramsObj->pszVersion) != OWS_1_0_0) { |
| 2901 | msSetError(MS_SOSERR, "VERSION %s not supported. Supported versions are: %s.", "msSOSDispatch()", paramsObj->pszVersion, pszSOSVersion); |
| 2902 | msSOSFreeParamsObj(paramsObj); |
| 2903 | free(paramsObj); |
| 2904 | paramsObj = NULL; |
| 2905 | return msSOSException(map, "version", "InvalidParameterValue"); |
| 2906 | } |
| 2907 | |
| 2908 | if (strcasecmp(paramsObj->pszRequest, "DescribeSensor") == 0) |
no test coverage detected