svn commit: samba r14739 - in branches/SAMBA_4_0/source: librpc/idl smb_server smb_server/smb smb_server/smb2

metze at samba.org metze at samba.org
Sun Mar 26 11:32:28 GMT 2006


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);
 }
 
 /*



More information about the samba-cvs mailing list