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
|
// Copyright (c) 2011, Code Aurora Forum. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Code Aurora Forum, Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
// THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "tcp_fin_aggregation_factory.h"
#include "tcp_fin_aggregation_bridge.h"
#include <dlfcn.h>
#include <cutils/log.h>
namespace net {
base::Lock TCPFinAggregationFactory::m_mutex;
TCPFinAggregationFactory* TCPFinAggregationFactory::s_pFactory = NULL;
TCPFinAggregationFactory* TCPFinAggregationFactory::GetTCPFinFactoryInstance(internal::ClientSocketPoolBaseHelper* pool_base_helper) {
base::AutoLock myLock(TCPFinAggregationFactory::m_mutex);
if(s_pFactory == NULL) {
s_pFactory = new TCPFinAggregationFactory(pool_base_helper);
}
return s_pFactory;
}
TCPFinAggregationFactory::TCPFinAggregationFactory(internal::ClientSocketPoolBaseHelper* pool_base_helper):m_pTCPFin(NULL) {
InitTCPFinAggregation(pool_base_helper);
}
void TCPFinAggregationFactory::InitTCPFinAggregation(internal::ClientSocketPoolBaseHelper* pool_base_helper) {
void* libHandle = dlopen("libtcpfinaggr.so", RTLD_LAZY);
if (!libHandle)
{
SLOGD("dl error message %s", dlerror());
}
if(libHandle) {
SLOGD("%s: libtcpfinaggr.so successfully loaded", __FILE__);
*(void **)(&tcpfin_create_) = dlsym(libHandle, "createTCPFinAggregation");
if(tcpfin_create_) {
SLOGD("%s,: TCP Fin Aggregation initializing method was found in libtcpfinaggr.so", __FILE__);
m_pTCPFin = tcpfin_create_(pool_base_helper);
return;
}
::dlclose(libHandle);
SLOGD("Failed to load createTCPFinAggregation symbol in libtcpfinaggr.so");
}
}
}; // namespace net
void DecrementIdleCount(net::internal::ClientSocketPoolBaseHelper* pool_base_helper)
{
pool_base_helper->DecrementIdleCount();
}
void RemoveGroup(net::internal::ClientSocketPoolBaseHelper* pool_base_helper, const std::string& group_name)
{
pool_base_helper->RemoveGroup(group_name);
}
bool ShouldCleanup(net::internal::IdleSocket* idle_socket, base::Time now, base::TimeDelta timeout)
{
return idle_socket->ShouldCleanup(now, timeout);
}
base::Time GetCurrentTime()
{
return base::Time::Now();
}
|