+
+static int send_srw_host_path(Z_SRW_PDU *sr, const char *host_port,
+ char *path)
+{
+ const char *charset = negotiationCharset;
+ Z_GDU *gdu;
+
+ gdu = z_get_HTTP_Request_uri(out, host_port, path, proxy_mode);
+
+ if (auth)
+ {
+ if (auth->which == Z_IdAuthentication_open)
+ {
+ char **darray;
+ int num;
+ nmem_strsplit(out->mem, "/", auth->u.open, &darray, &num);
+ if (num >= 1)
+ sr->username = darray[0];
+ if (num >= 2)
+ sr->password = darray[1];
+ }
+ else if (auth->which == Z_IdAuthentication_idPass)
+ {
+ sr->username = auth->u.idPass->userId;
+ sr->password = auth->u.idPass->password;
+ }
+ }
+
+ if (!yaz_matchstr(sru_method, "get"))
+ {
+ yaz_sru_get_encode(gdu->u.HTTP_Request, sr, out, charset);
+ }
+ else if (!yaz_matchstr(sru_method, "post"))
+ {
+ yaz_sru_post_encode(gdu->u.HTTP_Request, sr, out, charset);
+ }
+ else if (!yaz_matchstr(sru_method, "soap"))
+ {
+ yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, out, charset);
+ }
+ else if (!yaz_matchstr(sru_method, "solr"))
+ {
+ yaz_solr_encode_request(gdu->u.HTTP_Request, sr, out, charset);
+ }
+
+ return send_gdu(gdu);
+}
+
+static int send_srw(Z_SRW_PDU *sr)
+{
+ return send_srw_host_path(sr, wrbuf_cstr(cur_host), databaseNames[0]);
+}
+
+static int send_SRW_redirect(const char *uri)
+{
+ const char *username = 0;
+ const char *password = 0;
+ Z_GDU *gdu = get_HTTP_Request_url(out, uri);
+
+ gdu->u.HTTP_Request->method = odr_strdup(out, "GET");
+ z_HTTP_header_add(out, &gdu->u.HTTP_Request->headers, "Accept",
+ "text/xml");
+
+ yaz_cookies_request(yaz_cookies, out, gdu->u.HTTP_Request);
+ if (auth)
+ {
+ if (auth->which == Z_IdAuthentication_open)
+ {
+ char **darray;
+ int num;
+ nmem_strsplit(out->mem, "/", auth->u.open, &darray, &num);
+ if (num >= 1)
+ username = darray[0];
+ if (num >= 2)
+ password = darray[1];
+ }
+ else if (auth->which == Z_IdAuthentication_idPass)
+ {
+ username = auth->u.idPass->userId;
+ password = auth->u.idPass->password;
+ }
+ }
+
+ if (username && password)
+ {
+ z_HTTP_header_add_basic_auth(out, &gdu->u.HTTP_Request->headers,
+ username, password);
+ }
+
+ return send_gdu(gdu);
+}