aboutsummaryrefslogtreecommitdiffstats
path: root/metis/ccnx/forwarder/metis/core/metis_ConnectionTable.h
blob: 1f47dafd339fdf1819ef66f577200e1a4f70570b (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
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
/*
 * Copyright (c) 2017 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 Metis_metis_ConnectionTable_h
#define Metis_metis_ConnectionTable_h

#include <ccnx/forwarder/metis/core/metis_Connection.h>
#include <ccnx/forwarder/metis/core/metis_ConnectionList.h>
#include <ccnx/forwarder/metis/io/metis_IoOperations.h>
#include <ccnx/forwarder/metis/io/metis_AddressPair.h>

struct metis_connection_table;
typedef struct metis_connection_table MetisConnectionTable;

/**
 * Creates an empty connection table
 *
 * <#Paragraphs Of Explanation#>
 *
 * @retval <#value#> <#explanation#>
 *
 * Example:
 * @code
 * <#example#>
 * @endcode
 */
MetisConnectionTable *metisConnectionTable_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
 *
 * Example:
 * @code
 * <#example#>
 * @endcode
 */
void metisConnectionTable_Destroy(MetisConnectionTable **conntablePtr);

/**
 * @function metisConnectionTable_Add
 * @abstract Add a connection, takes ownership of memory
 * @discussion
 *   <#Discussion#>
 *
 * @param <#param1#>
 */
void metisConnectionTable_Add(MetisConnectionTable *table, MetisConnection *connection);

/**
 * @function metisConnectionTable_Remove
 * @abstract Removes the connection, calling Destroy on our copy
 * @discussion
 *   <#Discussion#>
 *
 * @param <#param1#>
 */
void metisConnectionTable_Remove(MetisConnectionTable *table, const MetisConnection *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 metisConnection_Release() on the connection object.
 *
 * @param [in] table The allocated connection table
 * @param [in] id The connection ID
 *
 * Example:
 * @code
 * <#example#>
 * @endcode
 */
void metisConnectionTable_RemoveById(MetisConnectionTable *table, unsigned id);

/**
 * Lookup a connection by the (local, remote) addres pair
 *
 * <#Paragraphs Of Explanation#>
 *
 * @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
 *
 * Example:
 * @code
 * <#example#>
 * @endcode
 */
const MetisConnection *metisConnectionTable_FindByAddressPair(MetisConnectionTable *table, const MetisAddressPair *pair);

/**
 * @function metisConnectionTable_FindById
 * @abstract Find a connection by its numeric id.
 * @discussion
 *   <#Discussion#>
 *
 * @param <#param1#>
 * @return NULL if not found
 */
const MetisConnection *metisConnectionTable_FindById(MetisConnectionTable *table, unsigned id);

/**
 * @function metisConnectionTable_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.
 *
 * @param <#param1#>
 * @return An allocated list, which you must destroy
 */
MetisConnectionList *metisConnectionTable_GetEntries(const MetisConnectionTable *table);
#endif // Metis_metis_ConnectionTable_h