This file is indexed.

/usr/include/sipwitch/mapped.h is in libsipwitch-dev 1.6.1-2build2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Definitions for memory mapped objects that may be shared between
 * processes.  This includes the memory mapped registry and active call
 * records.
 * @file sipwitch/mapped.h
 */

#ifndef _SIPWITCH_MAPPED_H_
#define _SIPWITCH_MAPPED_H_

#ifndef _SIPWITCH_NAMESPACE_H_
#include <sipwitch/namespace.h>
#endif

#ifndef _SIPWITCH_STATS_H_
#include <sipwitch/stats.h>
#endif

/**
 * Classes related to memory mapped objects from sipwitch server.
 * This covers the published interfaces to the sipwitch server itself.  These
 * are mostly classes that are mapped into shared memory blocks, and for
 * defining highly sipwitch specific plugin interfaces.
 * @file sipwitch/mapped.h
 */

// user and device properties...

#define USER_PROFILE_DIALABLE       0x0001  // user may be dialed
#define USER_PROFILE_REACHABLE      0x0002  // user may be reached by gateway
#define USER_PROFILE_INTERNAL       0x0008  // user may use dialing/routing
#define USER_PROFILE_SUBSCRIPTIONS  0x0010  // user can subscribe to others
#define USER_PROFILE_SUBSCRIBERS    0x0020  // user can be subscribed
#define USER_PROFILE_INCOMING       0x1000  // user "name" id may be accessed
#define USER_PROFILE_OUTGOING       0x2000  // may use generic uri
#define USER_PROFILE_SUPERUSER      0x8000  // has admin flag

#define USER_PROFILE_ADMIN          0xffff
#define USER_PROFILE_LOCAL          0x0fff
#define USER_PROFILE_DEVICE         0x0f0f
#define USER_PROFILE_SERVICE        0x7f0f
#define USER_PROFILE_SYSTEM         0x2f08
#define USER_PROFILE_DEFAULT        0x7fff
#define USER_PROFILE_RESTRICTED (0)

#define MAX_NETWORK_SIZE    16      // based on cidr name size...
#define MAX_PATTERN_SIZE    16
#define MAX_DISPLAY_SIZE    64
#define MAX_USERID_SIZE     48
#define MAX_IDENT_SIZE      (MAX_USERID_SIZE + 50)
#define MAX_URI_SIZE        256
#define MAX_SDP_BUFFER      1024

NAMESPACE_SIPWITCH
using namespace UCOMMON_NAMESPACE;

#define CALL_MAP        "sipwitch.calls"
#define REGISTRY_MAP    "sipwitch.regs"

/**
 * User profiles are used to map features and toll restriction level together
 * under a common identifier.
 */
typedef struct {
    char id[MAX_USERID_SIZE];
    unsigned short features;
    unsigned level;
} profile_t;

/**
 * Representation of a mapped active user record.  These exist in shared
 * memory.  They are used as data structures inside the server, and also
 * can be examined by external client applications.
 * @author David Sugar <dyfet@gnutelephony.org>
 */
class MappedRegistry : public LinkedObject
{
public:
    typedef enum {OFFLINE = 0, IDLE, BUSY, AWAY, DND} status_t;

    char    userid[MAX_USERID_SIZE];
    char    display[MAX_DISPLAY_SIZE];
    char    remote[MAX_USERID_SIZE];
    char    network[MAX_NETWORK_SIZE];
    status_t status;
    enum {EXPIRED = 0, USER, GATEWAY, SERVICE, REJECT, REFER, TEMPORARY, EXTERNAL} type;
    bool hidden;
    int rid;                    // registry remap or peer id
    unsigned ext;               // 0 or extnum
    unsigned count;             // active regs count
    volatile unsigned inuse;    // in use for call count
    sockaddr_internet contact;  // last/newest created contact registration
    time_t  created;            // initial registration
    volatile time_t  expires;   // when registry expires as a whole
    profile_t profile;          // profile at time of registration
    union {
        struct {                // external registry properties...
            const char *identity;   // forced identity string when calling
            const char *connect;    // invite uri host identity
            stats *statnode;        // associated stat node...
        } external;
        struct {                // internal registry properties
            LinkedObject *published;    // published routes
            LinkedObject *targets;  // active registrations (can be multiple)
            LinkedObject *routes;   // active route records
        } internal;
    } source;

    inline bool is_user(void) const
        {return (type == USER);};

    inline bool is_profiled(void) const
        {return (type == USER || type == SERVICE);};

    inline bool is_admin(void) const
        {return (is_profiled() && (profile.features & USER_PROFILE_SUPERUSER));};

    inline bool has_feature(unsigned short X) const
        {return is_profiled() && (profile.features & X);};
};

/**
 * Representation of an active call record.  These exist in shared
 * memory.  They are used as data structures inside the server, and also
 * can be examined by external client applications.
 * @author David Sugar <dyfet@gnutelephony.org>
 */
class MappedCall : public LinkedObject
{
public:
    time_t  created;
    time_t  active;
    char state[16];
    char authorized[MAX_USERID_SIZE];
    char source[MAX_IDENT_SIZE], target[MAX_IDENT_SIZE];
    char display[MAX_DISPLAY_SIZE];
    uint32_t sequence;
    int cid;
};

END_NAMESPACE

#endif