summaryrefslogtreecommitdiffstats
path: root/hicn-light/src/core/connectionTable.h
blob: 30517ae1de2bc6d8613f1687e091b375c4f95f20 (plain)
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
/*
 * Copyright (c) 2017-2019 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 */

#ifndef connectionTable_h
#define connectionTable_h

#include <src/core/connection.h>
#include <src/core/connectionList.h>
#include <src/io/addressPair.h>
#include <src/io/ioOperations.h>

struct connection_table;
typedef struct connection_table ConnectionTable;

/**
 * Creates an empty connection table
 */
ConnectionTable *connectionTable_Create(void);

/**
 * Destroys the connection table
 * This will release the reference to all connections stored in the connection
 * table.
 * @param [in,out] conntablePtr Pointer to the allocated connection table, will
 * be NULL'd
 */
void connectionTable_Destroy(ConnectionTable **conntablePtr);

/**
 * @function connectionTable_Add
 * @abstract Add a connection, takes ownership of memory
 */
void connectionTable_Add(ConnectionTable *table, Connection *connection);

/**
 * @function connectionTable_Remove
 * @abstract Removes the connection, calling Destroy on our copy
 */
void connectionTable_Remove(ConnectionTable *table,
                            const Connection *connection);

/**
 * Removes a connection from the connection table
 *
 * Looks up a connection by its connection ID and removes it from the connection
 * table. Removing the connection will call connection_Release() on the
 * connection object.
 *
 * @param [in] table The allocated connection table
 * @param [in] id The connection ID
 */
void connectionTable_RemoveById(ConnectionTable *table, unsigned id);

/**
 * Lookup a connection by the (local, remote) addres pair
 *
 * @param [in] table The allocated connection table
 * @param [in] pair The address pair to match, based on the inner values of the
 * local and remote addresses
 *
 * @retval non-null The matched conneciton
 * @retval null No match found or error
 */
const Connection *connectionTable_FindByAddressPair(ConnectionTable *table,
                                                    const AddressPair *pair);

/**
 * @function connectionTable_FindById
 * @abstract Find a connection by its numeric id.
 * @return NULL if not found
 */
const Connection *connectionTable_FindById(ConnectionTable *table, unsigned id);

/**
 * @function connectionTable_GetEntries
 * @abstract Returns a list of connections.  They are reference counted copies
 * from the table.
 * @discussion
 *   An allocated list of connections in the table.  Each list entry is a
 * reference counted copy of the connection in the table, thus they are "live"
 * objects.
 */
ConnectionList *connectionTable_GetEntries(const ConnectionTable *table);
#endif  // connectionTable_h