Author: metze
Date: 2006-03-26 11:32:27 +0000 (Sun, 26 Mar 2006)
New Revision: 14739

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14739

Log:
keep the last request time for the smbsrv_connection,
smbsrv_session and smbsrv_tcon for management tools

metze
Modified:
   branches/SAMBA_4_0/source/librpc/idl/irpc.idl
   branches/SAMBA_4_0/source/smb_server/management.c
   branches/SAMBA_4_0/source/smb_server/session.c
   branches/SAMBA_4_0/source/smb_server/smb/receive.c
   branches/SAMBA_4_0/source/smb_server/smb2/receive.c
   branches/SAMBA_4_0/source/smb_server/smb_server.c
   branches/SAMBA_4_0/source/smb_server/smb_server.h
   branches/SAMBA_4_0/source/smb_server/tcon.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/irpc.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/irpc.idl       2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/librpc/idl/irpc.idl       2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -92,6 +92,7 @@
                astring client_ip;
                NTTIME  connect_time;
                NTTIME  auth_time;
+               NTTIME  last_use_time;
        } smbsrv_session_info;
 
        typedef struct {
@@ -104,6 +105,7 @@
                astring share_name;
                astring client_ip;
                NTTIME  connect_time;
+               NTTIME  last_use_time;
        } smbsrv_tcon_info;
 
        typedef struct {

Modified: branches/SAMBA_4_0/source/smb_server/management.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/management.c   2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/smb_server/management.c   2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -63,6 +63,7 @@
                
                info->connect_time = 
timeval_to_nttime(&sess->statistics.connect_time);
                info->auth_time    = 
timeval_to_nttime(&sess->statistics.auth_time);
+               info->last_use_time= 
timeval_to_nttime(&sess->statistics.last_request_time);
                i++;
        }       
 
@@ -102,6 +103,7 @@
                info->tid          = tcon->tid;
                info->share_name   = tcon->share_name;
                info->connect_time = 
timeval_to_nttime(&tcon->statistics.connect_time);
+               info->last_use_time= 
timeval_to_nttime(&tcon->statistics.last_request_time);
                i++;
        }
 

Modified: branches/SAMBA_4_0/source/smb_server/session.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/session.c      2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/smb_server/session.c      2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -47,7 +47,8 @@
  * Find the session structure assoicated with a VUID
  * (not one from an in-progress session setup)
  */
-struct smbsrv_session *smbsrv_session_find(struct smbsrv_connection *smb_conn, 
uint64_t vuid)
+struct smbsrv_session *smbsrv_session_find(struct smbsrv_connection *smb_conn,
+                                          uint64_t vuid, struct timeval 
request_time)
 {
        void *p;
        struct smbsrv_session *sess;
@@ -62,6 +63,7 @@
        /* only return a finished session */
        sess = talloc_get_type(p, struct smbsrv_session);
        if (sess && sess->session_info) {
+               sess->statistics.last_request_time = request_time;
                return sess;
        }
 

Modified: branches/SAMBA_4_0/source/smb_server/smb/receive.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/receive.c  2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/smb_server/smb/receive.c  2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -71,8 +71,11 @@
 {
        struct smbsrv_connection *smb_conn = talloc_get_type(private, struct 
smbsrv_connection);
        struct smbsrv_request *req;
+       struct timeval cur_time = timeval_current();
        uint8_t command;
 
+       smb_conn->statistics.last_request_time = cur_time;
+
        /* see if its a special NBT packet */
        if (CVAL(blob.data, 0) != 0) {
                req = smbsrv_init_request(smb_conn);
@@ -82,7 +85,7 @@
 
                req->in.buffer = talloc_steal(req, blob.data);
                req->in.size = blob.length;
-               req->request_time = timeval_current();
+               req->request_time = cur_time;
 
                smbsrv_reply_special(req);
                return NT_STATUS_OK;
@@ -107,7 +110,7 @@
 
        req->in.buffer = talloc_steal(req, blob.data);
        req->in.size = blob.length;
-       req->request_time = timeval_current();
+       req->request_time = cur_time;
        req->chained_fnum = -1;
        req->in.allocated = req->in.size;
        req->in.hdr = req->in.buffer + NBT_HDR_SIZE;
@@ -471,7 +474,7 @@
 
        flags = smb_messages[type].flags;
 
-       req->tcon = smbsrv_smb_tcon_find(smb_conn, SVAL(req->in.hdr,HDR_TID));
+       req->tcon = smbsrv_smb_tcon_find(smb_conn, SVAL(req->in.hdr,HDR_TID), 
req->request_time);
 
        if (!req->session) {
                /* setup the user context for this request if it
@@ -484,7 +487,7 @@
                                req->session = req->tcon->sec_share.session;
                        }
                } else {
-                       req->session = smbsrv_session_find(req->smb_conn, 
SVAL(req->in.hdr,HDR_UID));
+                       req->session = smbsrv_session_find(req->smb_conn, 
SVAL(req->in.hdr,HDR_UID), req->request_time);
                }
        }
 

Modified: branches/SAMBA_4_0/source/smb_server/smb2/receive.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/receive.c 2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/smb_server/smb2/receive.c 2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -128,8 +128,8 @@
        tid             = IVAL(req->in.hdr, SMB2_HDR_TID);
        uid             = BVAL(req->in.hdr, SMB2_HDR_UID);
 
-       req->session    = smbsrv_session_find(req->smb_conn, uid);
-       req->tcon       = smbsrv_smb2_tcon_find(req->session, tid);
+       req->session    = smbsrv_session_find(req->smb_conn, uid, 
req->request_time);
+       req->tcon       = smbsrv_smb2_tcon_find(req->session, tid, 
req->request_time);
 
        errno = 0;
 
@@ -241,10 +241,13 @@
 {
        struct smbsrv_connection *smb_conn = talloc_get_type(private, struct 
smbsrv_connection);
        struct smb2srv_request *req;
+       struct timeval cur_time = timeval_current();
        uint32_t protocol_version;
        uint16_t buffer_code;
        uint32_t dynamic_size;
 
+       smb_conn->statistics.last_request_time = cur_time;
+
        /* see if its a special NBT packet */
        if (CVAL(blob.data,0) != 0) {
                DEBUG(2,("Special NBT packet on SMB2 connection"));
@@ -271,7 +274,7 @@
 
        req->in.buffer          = talloc_steal(req, blob.data);
        req->in.size            = blob.length;
-       req->request_time       = timeval_current();
+       req->request_time       = cur_time;
        req->in.allocated       = req->in.size;
 
        req->in.hdr             = req->in.buffer+ NBT_HDR_SIZE;

Modified: branches/SAMBA_4_0/source/smb_server/smb_server.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb_server.c   2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/smb_server/smb_server.c   2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -151,6 +151,8 @@
 
        irpc_add_name(conn->msg_ctx, "smb_server");
 
+       smb_conn->statistics.connect_time = timeval_current();
+
        smbsrv_management_init(smb_conn);
 }
 

Modified: branches/SAMBA_4_0/source/smb_server/smb_server.h
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb_server.h   2006-03-26 10:53:04 UTC 
(rev 14738)
+++ branches/SAMBA_4_0/source/smb_server/smb_server.h   2006-03-26 11:32:27 UTC 
(rev 14739)
@@ -84,6 +84,8 @@
                struct timeval connect_time;
                /* the time when the session setup was finished */
                struct timeval auth_time;
+               /* the time when the last request comes in */
+               struct timeval last_request_time;
        } statistics;
 };
 
@@ -124,7 +126,10 @@
 
        /* some statictics for the management tools */
        struct {
+               /* the time when the tree connect started */
                struct timeval connect_time;
+               /* the time when the last request comes in */
+               struct timeval last_request_time;
        } statistics;
 };
 
@@ -297,6 +302,14 @@
                enum security_types security;
                BOOL nt_status_support;
        } config;
+
+       /* some statictics for the management tools */
+       struct {
+               /* the time when the client connects */
+               struct timeval connect_time;
+               /* the time when the last request comes in */
+               struct timeval last_request_time;
+       } statistics;
 };
 
 #include "smb_server/smb_server_proto.h"

Modified: branches/SAMBA_4_0/source/smb_server/tcon.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/tcon.c 2006-03-26 10:53:04 UTC (rev 
14738)
+++ branches/SAMBA_4_0/source/smb_server/tcon.c 2006-03-26 11:32:27 UTC (rev 
14739)
@@ -58,7 +58,8 @@
 /****************************************************************************
 find a tcon given a tid for SMB
 ****************************************************************************/
-static struct smbsrv_tcon *smbsrv_tcon_find(struct smbsrv_tcons_context 
*tcons_ctx, uint32_t tid)
+static struct smbsrv_tcon *smbsrv_tcon_find(struct smbsrv_tcons_context 
*tcons_ctx,
+                                           uint32_t tid, struct timeval 
request_time)
 {
        void *p;
        struct smbsrv_tcon *tcon;
@@ -71,19 +72,24 @@
        if (!p) return NULL;
 
        tcon = talloc_get_type(p, struct smbsrv_tcon);
+       if (!tcon) return NULL;
 
+       tcon->statistics.last_request_time = request_time;
+
        return tcon;
 }
 
-struct smbsrv_tcon *smbsrv_smb_tcon_find(struct smbsrv_connection *smb_conn, 
uint32_t tid)
+struct smbsrv_tcon *smbsrv_smb_tcon_find(struct smbsrv_connection *smb_conn,
+                                        uint32_t tid, struct timeval 
request_time)
 {
-       return smbsrv_tcon_find(&smb_conn->smb_tcons, tid);
+       return smbsrv_tcon_find(&smb_conn->smb_tcons, tid, request_time);
 }
 
-struct smbsrv_tcon *smbsrv_smb2_tcon_find(struct smbsrv_session *smb_sess, 
uint32_t tid)
+struct smbsrv_tcon *smbsrv_smb2_tcon_find(struct smbsrv_session *smb_sess,
+                                         uint32_t tid, struct timeval 
request_time)
 {
        if (!smb_sess) return NULL;
-       return smbsrv_tcon_find(&smb_sess->smb2_tcons, tid);
+       return smbsrv_tcon_find(&smb_sess->smb2_tcons, tid, request_time);
 }
 
 /*

Reply via email to