zoom: more configurable format for contentProxy@server
[metaproxy-moved-to-github.git] / src / filter_zoom.cpp
index b3c989f..ae29e0d 100644 (file)
@@ -1407,28 +1407,35 @@ Z_Records *yf::Zoom::Frontend::get_records(Package &package,
     {  // only return records if no error and at least one record
 
         const char *xsl_parms[3];
-        char cproxy_host[1024];
-
+        mp::wrbuf cproxy_host;
+        
         if (b->enable_cproxy && b->content_session_id.length())
         {
-            sprintf(cproxy_host, "%s.%s/",
-                    b->content_session_id.c_str(),
-                    m_p->content_proxy_server.c_str());
+            const char *proxy_server_cstr = m_p->content_proxy_server.c_str();
+            const char *session_sub = strstr(proxy_server_cstr, "%s");
             
-            char *q_cproxy_host = (char *) 
-                odr_malloc(odr, strlen(cproxy_host) + 3);
-            strcpy(q_cproxy_host, "\"");
-            strcat(q_cproxy_host, cproxy_host);
-            strcat(q_cproxy_host, "\"");
-
+            if (session_sub)
+            {
+                wrbuf_puts(cproxy_host, "\"");
+                wrbuf_write(cproxy_host, proxy_server_cstr, 
+                            session_sub - proxy_server_cstr);
+                wrbuf_puts(cproxy_host, b->content_session_id.c_str());
+                wrbuf_puts(cproxy_host, session_sub + 2);
+                wrbuf_puts(cproxy_host, "/\"");
+            }
+            else
+            {
+                wrbuf_printf(cproxy_host, "\"%s.%s/\"",
+                             b->content_session_id.c_str(),
+                             proxy_server_cstr);
+            }
             xsl_parms[0] = "cproxyhost";
-            xsl_parms[1] = q_cproxy_host;
+            xsl_parms[1] = wrbuf_cstr(cproxy_host);
             xsl_parms[2] = 0;
         }
         else
         {
             xsl_parms[0] = 0;
-            *cproxy_host = '\0';
         }
 
         char *odr_database = odr_strdup(odr,