Skip to content

Commit

Permalink
Merge pull request #186 from rod-hynes/master
Browse files Browse the repository at this point in the history
Web transport API requests complete; other misc. fixes
  • Loading branch information
rod-hynes committed Jun 17, 2016
2 parents 6ce4c8f + 8abcd11 commit cd69792
Show file tree
Hide file tree
Showing 11 changed files with 344 additions and 293 deletions.
9 changes: 6 additions & 3 deletions Server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,12 @@ func main() {

configFileContents, serverEntryFileContents, err :=
server.GenerateConfig(
serverIPaddress,
generateWebServerPort,
tunnelProtocolPorts)
&server.GenerateConfigParams{
ServerIPAddress: serverIPaddress,
EnableSSHAPIRequests: true,
WebServerPort: generateWebServerPort,
TunnelProtocolPorts: tunnelProtocolPorts,
})
if err != nil {
fmt.Printf("generate failed: %s\n", err)
os.Exit(1)
Expand Down
35 changes: 33 additions & 2 deletions psiphon/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,8 @@ type ActivityMonitoredConn struct {
net.Conn
inactivityTimeout time.Duration
activeOnWrite bool
startTime int64
lastActivityTime int64
lruEntry *LRUConnsEntry
}

Expand All @@ -761,20 +763,42 @@ func NewActivityMonitoredConn(
if inactivityTimeout > 0 {
conn.SetReadDeadline(time.Now().Add(inactivityTimeout))
}

now := time.Now().UnixNano()

return &ActivityMonitoredConn{
Conn: conn,
inactivityTimeout: inactivityTimeout,
activeOnWrite: activeOnWrite,
startTime: now,
lastActivityTime: now,
lruEntry: lruEntry,
}
}

// GetStartTime gets the time when the ActivityMonitoredConn was
// initialized.
func (conn *ActivityMonitoredConn) GetStartTime() time.Time {
return time.Unix(0, conn.startTime)
}

// GetActiveDuration returns the time elapsed between the initialization
// of the ActivityMonitoredConn and the last Read (or Write when
// activeOnWrite is specified).
func (conn *ActivityMonitoredConn) GetActiveDuration() time.Duration {
return time.Duration(atomic.LoadInt64(&conn.lastActivityTime) - conn.startTime)
}

func (conn *ActivityMonitoredConn) Read(buffer []byte) (int, error) {
n, err := conn.Conn.Read(buffer)
if err == nil {

atomic.StoreInt64(&conn.lastActivityTime, time.Now().UnixNano())

if conn.inactivityTimeout > 0 {
conn.Conn.SetReadDeadline(time.Now().Add(conn.inactivityTimeout))
}

if conn.lruEntry != nil {
conn.lruEntry.Touch()
}
Expand All @@ -785,9 +809,16 @@ func (conn *ActivityMonitoredConn) Read(buffer []byte) (int, error) {
func (conn *ActivityMonitoredConn) Write(buffer []byte) (int, error) {
n, err := conn.Conn.Write(buffer)
if err == nil {
if conn.inactivityTimeout > 0 && conn.activeOnWrite {
conn.Conn.SetReadDeadline(time.Now().Add(conn.inactivityTimeout))

if conn.activeOnWrite {

atomic.StoreInt64(&conn.lastActivityTime, time.Now().UnixNano())

if conn.inactivityTimeout > 0 {
conn.Conn.SetReadDeadline(time.Now().Add(conn.inactivityTimeout))
}
}

if conn.lruEntry != nil {
conn.lruEntry.Touch()
}
Expand Down
Loading

0 comments on commit cd69792

Please sign in to comment.