Blame DataDDS.cc

Packit a4aae4
Packit a4aae4
// -*- mode: c++; c-basic-offset:4 -*-
Packit a4aae4
Packit a4aae4
// This file is part of libdap, A C++ implementation of the OPeNDAP Data
Packit a4aae4
// Access Protocol.
Packit a4aae4
Packit a4aae4
// Copyright (c) 2002,2003 OPeNDAP, Inc.
Packit a4aae4
// Author: James Gallagher <jgallagher@opendap.org>
Packit a4aae4
//
Packit a4aae4
// This library is free software; you can redistribute it and/or
Packit a4aae4
// modify it under the terms of the GNU Lesser General Public
Packit a4aae4
// License as published by the Free Software Foundation; either
Packit a4aae4
// version 2.1 of the License, or (at your option) any later version.
Packit a4aae4
//
Packit a4aae4
// This library is distributed in the hope that it will be useful,
Packit a4aae4
// but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a4aae4
// Lesser General Public License for more details.
Packit a4aae4
//
Packit a4aae4
// You should have received a copy of the GNU Lesser General Public
Packit a4aae4
// License along with this library; if not, write to the Free Software
Packit a4aae4
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit a4aae4
//
Packit a4aae4
// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
Packit a4aae4
Packit a4aae4
// (c) COPYRIGHT URI/MIT 1997-1999
Packit a4aae4
// Please read the full copyright statement in the file COPYRIGHT_URI.
Packit a4aae4
//
Packit a4aae4
// Authors:
Packit a4aae4
//      jhrg,jimg       James Gallagher <jgallagher@gso.uri.edu>
Packit a4aae4
Packit a4aae4
//
Packit a4aae4
// jhrg 9/19/97
Packit a4aae4
Packit a4aae4
#include "config.h"
Packit a4aae4
Packit a4aae4
#include <iostream>
Packit a4aae4
#include <iomanip>
Packit a4aae4
#include <sstream>
Packit a4aae4
#include <string>
Packit a4aae4
Packit a4aae4
#include "DataDDS.h"
Packit a4aae4
#include "debug.h"
Packit a4aae4
Packit a4aae4
using namespace std;
Packit a4aae4
Packit a4aae4
namespace libdap {
Packit a4aae4
Packit a4aae4
// private
Packit a4aae4
Packit a4aae4
/** Parse the version string. A string that does not parse causes the
Packit a4aae4
    version to default to 0.0. This is better than throwing an Error since
Packit a4aae4
    this method is called from a constructor. */
Packit a4aae4
void
Packit a4aae4
DataDDS::m_version_string_to_numbers()
Packit a4aae4
{
Packit a4aae4
    string num = d_server_version.substr(d_server_version.find('/') + 1);
Packit a4aae4
Packit a4aae4
    if (!num.empty() && num.find('.') != string::npos) {
Packit a4aae4
        istringstream iss(num);
Packit a4aae4
        char c;
Packit a4aae4
Packit a4aae4
        iss >> d_server_version_major;
Packit a4aae4
        iss >> c;               // This reads the `.' in the version string
Packit a4aae4
        iss >> d_server_version_minor;
Packit a4aae4
Packit a4aae4
        // Did it parse?
Packit a4aae4
        if (!(c == '.' && d_server_version_major > 0
Packit a4aae4
              && d_server_version_minor > 0)) {
Packit a4aae4
Packit a4aae4
            d_server_version_major = 0;
Packit a4aae4
            d_server_version_minor = 0;
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
    else {
Packit a4aae4
        d_server_version_major = 0;
Packit a4aae4
        d_server_version_minor = 0;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    DBG(cerr << "Server version: " << d_server_version_major << "." \
Packit a4aae4
        << d_server_version_minor << endl);
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/** Parse the protocol string. A string that does not parse causes the
Packit a4aae4
    version to default to 2.0. This is better than throwing an Error since
Packit a4aae4
    this method is called from a constructor. */
Packit a4aae4
void
Packit a4aae4
DataDDS::m_protocol_string_to_numbers()
Packit a4aae4
{
Packit a4aae4
Packit a4aae4
    if (!d_protocol_version.empty() && d_protocol_version.find('.')
Packit a4aae4
        != string::npos) {
Packit a4aae4
        istringstream iss(d_protocol_version);
Packit a4aae4
        char c;
Packit a4aae4
Packit a4aae4
        iss >> d_server_protocol_major;
Packit a4aae4
        iss >> c;               // This reads the `.' in the version string
Packit a4aae4
        iss >> d_server_protocol_minor;
Packit a4aae4
Packit a4aae4
        // Did it parse?
Packit a4aae4
        if (!(c == '.' && d_server_protocol_major > 0)) {
Packit a4aae4
            d_server_protocol_major = 2;
Packit a4aae4
            d_server_protocol_minor = 0;
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
    else {
Packit a4aae4
        d_server_protocol_major = 2;
Packit a4aae4
        d_server_protocol_minor = 0;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    DBG(cerr << "Server version: " << d_server_version_major << "." \
Packit a4aae4
        << d_server_version_minor << endl);
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/** @brief dumps information about this object
Packit a4aae4
 *
Packit a4aae4
 * Displays the pointer value of this instance and then calls parent dump
Packit a4aae4
 *
Packit a4aae4
 * @param strm C++ i/o stream to dump the information to
Packit a4aae4
 * @return void
Packit a4aae4
 */
Packit a4aae4
void
Packit a4aae4
DataDDS::dump(ostream &strm) const
Packit a4aae4
{
Packit a4aae4
    strm << DapIndent::LMarg << "DataDDS::dump - ("
Packit a4aae4
    << (void *)this << ")" << endl ;
Packit a4aae4
    DapIndent::Indent() ;
Packit a4aae4
    DDS::dump(strm) ;
Packit a4aae4
    strm << DapIndent::LMarg << "server version: " << d_server_version
Packit a4aae4
         << endl ;
Packit a4aae4
    strm << DapIndent::LMarg << "version major: " << d_server_version_major
Packit a4aae4
         << endl ;
Packit a4aae4
    strm << DapIndent::LMarg << "version minor: " << d_server_version_minor
Packit a4aae4
         << endl ;
Packit a4aae4
    strm << DapIndent::LMarg << "protocol version: " << d_protocol_version
Packit a4aae4
         << endl ;
Packit a4aae4
    strm << DapIndent::LMarg << "protocol major: " << d_server_protocol_major
Packit a4aae4
         << endl ;
Packit a4aae4
    strm << DapIndent::LMarg << "protocol minor: " << d_server_protocol_minor
Packit a4aae4
         << endl ;
Packit a4aae4
    DapIndent::UnIndent() ;
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
// public
Packit a4aae4
Packit a4aae4
/** @brief Make an instance of DataDDS
Packit a4aae4
    A DataDDS instance is a DDS with additional information about the version
Packit a4aae4
    of the server from which the data came.
Packit a4aae4
    @param factory Use this BaseTypeFactory to instantiate the variables.
Packit a4aae4
    Caller must free; can also be set using the set_factory() method. Never
Packit a4aae4
    delete until just before deleting the DDS itself unless you intend to
Packit a4aae4
    replace the factory with a new instance.
Packit a4aae4
    @param n The name of the dataset. Can also be set using the
Packit a4aae4
    set_dataset_name() method.
Packit a4aae4
    @param v The server version.
Packit a4aae4
    @param p The protocol version. */
Packit a4aae4
Packit a4aae4
DataDDS::DataDDS(BaseTypeFactory *factory, const string &n, const string &v,
Packit a4aae4
                 const string &p)
Packit a4aae4
        : DDS(factory, n), d_server_version(v), d_protocol_version(p)
Packit a4aae4
{
Packit a4aae4
    m_version_string_to_numbers();
Packit a4aae4
    m_protocol_string_to_numbers();
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
} // namespace libdap
Packit a4aae4