~ubuntu-branches/debian/sid/monopd/sid

« back to all changes in this revision

Viewing changes to src/socket.cpp

  • Committer: Package Import Robot
  • Author(s): Markus Koschany
  • Date: 2014-02-28 15:39:47 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20140228153947-1a5z05x3alj61wx1
Tags: 0.9.5-1
* Imported Upstream version 0.9.5.
  - Add support for IPv6 and systemd.
* Update watch file and point to the new upstream location
  at tuxfamily.org.
* Drop all patches. Merged upstream.
* debian/control:
  - Drop libcapsinetwork-dev from Build-Depends.
    Essential features of libcapsinetwork were merged into monopd and
    IPv6 support was added.
  - Add pkg-config to Build-Depends.
  - Add libsystemd-daemon-dev [linux-any] to Build-Depends.
  - Update homepage field and point to gtkatlantic.gradator.net.
* Add monopd.service and monopd.socket file and support systemd.
* Update monopd.6 man page.
* Use dh-systemd helper.
* Update debian/copyright. Add new BSD license.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) 2002-2004 Rob Kaper <rob@unixcode.org>. All rights reserved.
 
2
//
 
3
// Redistribution and use in source and binary forms, with or without
 
4
// modification, are permitted provided that the following conditions
 
5
// are met:
 
6
//
 
7
// 1. Redistributions of source code must retain the above copyright
 
8
//    notice, this list of conditions and the following disclaimer.
 
9
// 2. Redistributions in binary form must reproduce the above copyright
 
10
//    notice, this list of conditions and the following disclaimer in the
 
11
//    documentation and/or other materials provided with the distribution.
 
12
//
 
13
// THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS'' AND
 
14
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
15
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
16
// ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
 
17
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
18
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
19
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
20
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
21
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
22
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
23
// SUCH DAMAGE.
 
24
 
 
25
#include <stdarg.h>
 
26
#include <stdio.h>
 
27
#include <unistd.h>
 
28
#include <string.h>
 
29
 
 
30
#include "socket.h"
 
31
 
 
32
extern int errno;
 
33
 
 
34
Socket::Socket( int fd )
 
35
 :      m_status( Socket::New ),
 
36
        m_fd( fd )
 
37
{
 
38
}
 
39
 
 
40
int Socket::ioWrite(const std::string data)
 
41
{
 
42
        if ( m_status == New || m_status == Ok )
 
43
        {
 
44
                write( m_fd, data.c_str(), strlen( data.c_str() ) );
 
45
                return 0;
 
46
        }
 
47
        return 1;
 
48
}
 
49
 
 
50
bool Socket::hasReadLine()
 
51
{
 
52
        static std::string newLine = "\r\n";
 
53
        std::string::size_type pos = m_ioBuf.find_first_of(newLine);
 
54
 
 
55
        return (!(pos == std::string::npos));
 
56
}
 
57
 
 
58
const std::string Socket::readLine()
 
59
{
 
60
        static std::string newLine = "\r\n";
 
61
        std::string::size_type pos = m_ioBuf.find_first_of(newLine);
 
62
 
 
63
        if (pos != std::string::npos)
 
64
        {
 
65
                // Grab first part for the listener
 
66
           std::string data = m_ioBuf.substr(0, pos);
 
67
 
 
68
                // Remove grabbed part from buffer
 
69
                m_ioBuf.erase(0, pos);
 
70
 
 
71
                // Remove all subsequent newlines
 
72
                m_ioBuf.erase(0, m_ioBuf.find_first_not_of(newLine));
 
73
 
 
74
                return data;
 
75
        }
 
76
        return std::string();
 
77
}
 
78
 
 
79
void Socket::fillBuffer(const std::string data)
 
80
{
 
81
        if (m_ioBuf.size())
 
82
                m_ioBuf.append(data);
 
83
        else
 
84
        {
 
85
                m_ioBuf.erase();
 
86
                m_ioBuf.append(data);
 
87
        }
 
88
}