Commit ecc20c920accd72ba82fd38e701937a077f49ab2

Authored by Jürgen Knödlseder
1 parent b7e54819

Extract proper xmlrpc path information from .samp lockfile and use this informat…

…ion to post messages.
ChangeLog
1   -2015-01-07 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
  1 +2015-01-12 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
  2 +
  3 + * Bug fix version 0.9.2 released
  4 + ================================
  5 +
  6 + Use URL path informtion in GVOClient connection to Hub
  7 +
2 8  
3 9 * Bug fix version 0.9.1 released
4 10 ================================
... ...
1   -New Features and Important Changes in GammaLib 00-09-01
  1 +New Features and Important Changes in GammaLib 00-09-02
2 2  
3 3 Author(s) : Juergen Knoedlseder
4 4  
5   -7 January 2015
  5 +12 January 2015
6 6  
7 7  
8 8 1. Introduction
... ... @@ -78,7 +78,9 @@ None
78 78  
79 79 15. VO module
80 80 -------------
81   -None
  81 +The XMLRPC path name as found in the .samp lockfile is now used to compose
  82 +the http POST message. This solves a problem when trying to connect to some
  83 +VO tool hubs.
82 84  
83 85  
84 86 16. Xspec module
... ... @@ -103,8 +105,7 @@ None
103 105  
104 106 20. CTA interface
105 107 -----------------
106   -Corrected bug #1383 that led to a unit test failure for the CTA energy dispersion
107   -computation on recent gcc compiler versions.
  108 +None
108 109  
109 110  
110 111 21. COMPTEL interface
... ...
include/GVOClient.hpp
... ... @@ -98,6 +98,7 @@ protected:
98 98 std::string m_hub_url; //!< The XML-RPC endpoint for communication with the hub
99 99 std::string m_hub_host; //!< Hub host (extracted from XML-RPC endpoint)
100 100 std::string m_hub_port; //!< Hub port (extracted from XML-RPC endpoint)
  101 + std::string m_hub_path; //!< Hub path (extracted from XML-RPC endpoint)
101 102 std::string m_version; //!< The version of the SAMP Standard Profile implemented by the hub
102 103 std::string m_client_key; //!< Private client key
103 104 std::string m_hub_id; //!< Hub identifier
... ...
src/vo/GVOClient.cpp
... ... @@ -291,8 +291,9 @@ std::string GVOClient::print(const GChatter&amp; chatter) const
291 291 if (has_hub()) {
292 292 result.append("\n"+gammalib::parformat("Hub key")+m_secret);
293 293 result.append("\n"+gammalib::parformat("Hub URL")+m_hub_url);
294   - result.append("\n"+gammalib::parformat("Hub host (port)"));
295   - result.append(m_hub_host+" ("+m_hub_port+")");
  294 + result.append("\n"+gammalib::parformat("Hub host")+m_hub_host);
  295 + result.append("\n"+gammalib::parformat("Hub port")+m_hub_port);
  296 + result.append("\n"+gammalib::parformat("Hub path")+m_hub_path);
296 297 result.append("\n"+gammalib::parformat("SAMP protocol version"));
297 298 result.append(m_version);
298 299 result.append("\n"+gammalib::parformat("Hub connection"));
... ... @@ -340,6 +341,7 @@ void GVOClient::init_members(void)
340 341 m_hub_url.clear();
341 342 m_hub_host.clear();
342 343 m_hub_port.clear();
  344 + m_hub_path.clear();
343 345 m_version.clear();
344 346 m_client_key.clear();
345 347 m_hub_id.clear();
... ... @@ -364,6 +366,7 @@ void GVOClient::copy_members(const GVOClient&amp; client)
364 366 m_hub_url = client.m_hub_url;
365 367 m_hub_host = client.m_hub_host;
366 368 m_hub_port = client.m_hub_port;
  369 + m_hub_path = client.m_hub_path;
367 370 m_version = client.m_version;
368 371 m_client_key = client.m_client_key;
369 372 m_hub_id = client.m_hub_id;
... ... @@ -463,11 +466,12 @@ bool GVOClient::find_hub(void)
463 466 // Close SAMP lockfile
464 467 fclose(fptr);
465 468  
466   - // Extract host and port from Hub URL
  469 + // Extract host, port and path from Hub URL
467 470 if (m_hub_url.compare(0, 7, "http://") == 0) {
468 471 size_t length;
469 472 size_t start = 7;
470 473 size_t stop = m_hub_url.find(":", start);
  474 + size_t end = std::string::npos;
471 475 if (stop != std::string::npos) {
472 476 length = stop - start;
473 477 }
... ... @@ -476,8 +480,8 @@ bool GVOClient::find_hub(void)
476 480 }
477 481 m_hub_host = m_hub_url.substr(start, length);
478 482 if (stop != std::string::npos) {
479   - stop = stop + 1;
480   - size_t end = m_hub_url.find("/", stop);
  483 + stop++;
  484 + end = m_hub_url.find("/", stop);
481 485 if (end != std::string::npos) {
482 486 length = end - stop;
483 487 }
... ... @@ -486,6 +490,11 @@ bool GVOClient::find_hub(void)
486 490 }
487 491 m_hub_port = m_hub_url.substr(stop, length);
488 492 }
  493 + if (end != std::string::npos) {
  494 + end++;
  495 + length = m_hub_url.length() - end;
  496 + m_hub_path = m_hub_url.substr(end, length);
  497 + }
489 498 }
490 499  
491 500 // Check for existence of mandatory tokens
... ... @@ -850,7 +859,7 @@ void GVOClient::post_string(const std::string&amp; content) const
850 859 int length = content.length();
851 860  
852 861 // Set prefix
853   - std::string prefix = "POST /xmlrpc HTTP/1.0\n"
  862 + std::string prefix = "POST /"+m_hub_path+" HTTP/1.0\n"
854 863 "User-Agent: GammaLib\n"
855 864 "Content-Type: text/xml\n"
856 865 "Content-Length: "+gammalib::str(length)+"\n\n";
... ...