[Mapserver-dev] RE: [Mapserver-users] additional parameters for WMS layer

Mike V. Andreev andreev at d902.iki.rssi.ru
Thu May 22 04:15:15 EDT 2003


Paul,
Thank you for your comments 
After some thinking and reading docs I guess that suggestion is good
solution in my case.

20.05.2003, 17:46, Paul Spencer wrote:
> Mike,
> 
> if I understand what you are trying to do correctly, I have successfully 
> done something similar by modifying the url that points to the WMS 
> server to include my additional parameters (I added RADIUS and 
> FEATURE_COUNT for cubeserv WMS servers), so my url looked like
> 
> http://www.cubewerx.com/demo/cubeserv/cubeserv.cgi?RADIUS=3&FEATURE_COUNT=5
> 
> Mapserver appends the WMS parameters to this URL correctly.  I have also 
> done this with other parameters that I have needed when developing other 
> applications.  Typically I do this using mapscript and modify the 
> connection at run time to append my custom parameters, but you can hard 
> code them too.
> 
> Cheers,
> 
> Paul
> 
> Mike V. Andreev wrote:
> > Hello John,
> > thanks for your comments.
> > 
> > 
> >>Mike,
> >>
> >>I feel what you are asking is an implementation problem and not a mapserv development issue.  I wouldn't like to see mapserv develop some WMS parameters that are not OGC compliant.  Not everyone allows cookies on their browser for security reasons and tying mapserv into a particular type of implementation would be dangerous unless it was compliant to the OGC specification.
> >>
> >>I think that you could use hidden input types to pass the extra parameters backwards and forwards to your CGI scripts.  However, I would be very surprised if the OGC specifications have not already catered for these extra parameters.
> >>
> > 
> > 
> > I'm not sure what do you mean here. If you mean that OGC specification
> > already include my parameters then you are wrong. This is not geographic
> > parameters. For example it is a list of monitoring object or a datetime
> > range. But OGC WMS specification allows me to use additional parameters
> > in request to my CGI script, and if I would request my script directly
> > there isn't a problem. 
> > But request to my script must be formed by mapserver. And it contains:
> > 1) string from layerObj.connection and 2) parameters formed by mapserver
> > (such as BBOX, SRS, etc). I can not define additional parameters in
> > mapserver's map file because they must be chosen by and user and change
> > from query to query. 
> > By the other hand I can send additional parameters from form fields
> > (hidden or not) only to mapserver and they will have no an effect on
> > request mapserver send to my script. Or may be I miss something in docs
> > and there is some special mapserver option for it ? This would be a
> > solution.
> > 
> > 
> > 
> >>Just my initial thoughts on the idea.
> >>
> >>John
> >>
> >>
> >>>-----Original Message-----
> >>>From: Mike V. Andreev [mailto:andreev at d902.iki.rssi.ru] 
> >>>Sent: Saturday, 17 May 2003 3:35 
> >>>To: mapserver-dev at lists.gis.umn.edu
> >>>Cc: mapserver-users at lists.gis.umn.edu
> >>>Subject: [Mapserver-users] additional parameters for WMSÂ  layer
> >>>
> >>>
> >>>Hello
> >>>
> >>>I have mapserever compiled with WMS client support and I use map file
> >>>with defined WMS layer. This layer is a http reference to my 
> >>>perl script
> >>>on the same http server. This script understand OGC WMS parameters in
> >>>query string and can create maps whith information from some database.
> >>>But to  create sensible map this script need additional information in
> >>>request. I wanted to use http cookies to store that parameters. But I
> >>>have a problem here. Then my client send request to http server with
> >>>mapserver URI request contain proper cookies but after that mapserver
> >>>need to make http request to perl script URI and of couse this request
> >>>contains no cookies.
> >>>
> >>>So I want to ask two question here:
> >>>
> >>>1) Can somebody give me any hits to solve my problem with 
> >>>existing soft?
> >>>
> >>>2) I have an idea how to extend mapserver functionality so it 
> >>>be able to
> >>>solve my problem. So I want to ask what do you people think about it.
> >>>
> >>>There is my proposal: each layer object could contain boolean 
> >>>parameter
> >>>http_cookies_forwad (disabled by default). So if this featcher enabled
> >>>in layer with connectiontype equal to 'WMS' (and may be 
> >>>'WFS') than when
> >>>mapserver make http request to proper URL it sends additional http
> >>>headers: 1) Cookie - header with cookies client send to 
> >>>mapserver and 2)
> >>>X-Forwarder-For - header with original client ip (as far as mapserver
> >>>can determine it).
> >>>
> >>>
> >>>Just to illustrate my idea I've made simple patch to maphttp.c. I used
> >>>today's (2003-05-16) nightly build. This patch contains only
> >>>functionality for sending proper http request. There is no 
> >>>any stuff to
> >>>support new feature in layreObj but I think whole idea is clear.
> >>>
> >>>
> >>>
> >>>
> >>>81a82,83
> >>>
> >>>>#define HTTP_COOKIES_FORWARDING 1
> >>>>
> >>>
> >>>243a246,247
> >>>
> >>>>    char     *tmp_env_read, *strBuf = NULL;
> >>>>    struct curl_slist *slist=NULL;
> >>>
> >>>366a371,392
> >>>
> >>>>        /* If we need to forward http cookies to server  */
> >>>>        if( HTTP_COOKIES_FORWARDING && (tmp_env_read = 
> >>>
> >>>curl_getenv( "HTTP_COOKIE" ) ) != NULL ){
> >>>
> >>>>           /*add cookies to http_handle*/
> >>>>           curl_easy_setopt(http_handle, CURLOPT_COOKIE, 
> >>>
> >>>tmp_env_read);
> >>>
> >>>>          /*add X-Forwarded-For header with original client ip */
> >>>>           if( (tmp_env_read = curl_getenv( 
> >>>
> >>>"HTTP_X_FORWARDED_FOR" ))  == NULL )
> >>>
> >>>>              if( (tmp_env_read = curl_getenv( 
> >>>
> >>>"HTTP_FORWARDED" ) ) == NULL )
> >>>
> >>>>                 if( (tmp_env_read = curl_getenv( 
> >>>
> >>>"HTTP_CLIENT_IP" ) ) == NULL )
> >>>
> >>>>                    tmp_env_read = curl_getenv( "REMOTE_ADDR" );
> >>>>
> >>>>           if( tmp_env_read != NULL ){
> >>>>#define HTTP_HEADER_BUF_LENGTH 100
> >>>>              strBuf = (char*)malloc( HTTP_HEADER_BUF_LENGTH );
> >>>>              snprintf( strBuf, HTTP_HEADER_BUF_LENGTH, 
> >>>
> >>>"X-Forwarded-For: %s", tmp_env_read);
> >>>
> >>>>#undef HTTP_HEADER_BUF_LENGTH
> >>>>              slist = curl_slist_append( slist, strBuf);
> >>>>              curl_easy_setopt(http_handle, 
> >>>
> >>>CURLOPT_HTTPHEADER, slist);
> >>>
> >>>>           }
> >>>>       }
> >>>>
> >>>>
> >>>
> >>>554a581,583
> >>>
> >>>>    if( slist != NULL ){ curl_slist_free_all(slist); }
> >>>>    if( strBuf != NULL ){ free( strBuf ); }
> >>>>
> >>>
> >>>556a586,587
> >>>
> >>>>#undef HTTP_COOKIES_FORWARDING
> >>>>
> >>>
> >>>


-- 
 ____________________________________________________________
| Mike Andreev, software engineer andreev at d902.iki.rssi.ru   |
| SMIS Lab, Space Research Institute http://smis.iki.rssi.ru |
|____________________________________________________________|





More information about the mapserver-dev mailing list