summaryrefslogtreecommitdiffstats
path: root/httpserver/http-date.cc
blob: 82324dd07b1c1408e95c55e727e7c5f09f4dd709 (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
/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community.  If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see <http://www.rasdaman.org>
* or contact Peter Baumann via <baumann@rasdaman.com>.
*/
/*------------------------------------------------------------------------*/
/*  http-support.c - get and set HTTP date strings.                       */
/*                                                                        */
/*------------------------------------------------------------------------*/
/*
 * RCS:
 *   $RCSfile: http-date.c,v $ $Revision: 1.1 $ $State: Exp $
 *   $Locker:  $ 
 */


#include   "defs.h"
#include   "types.h"
#include   "protos.h"
#include   "server.h"
#include   "http-defs.h"
#include   "http.h"


/****** http-date/HTTP_Date **************************************************
*                                                                             
*   NAME                                                                      
*       HTTP_Date -- create a HTTP date string.                               
*                                                                             
*   SYNOPSIS                                                                  
*       rc_t HTTP_Date( char *Buffer, size_t BuffSize );                      
*                                                                             
*   FUNCTION                                                                  
*       Creates a date (and time) string as defined in the HTTP               
*       specifications. It uses the `gmtime()' system function to get the     
*       current time in Greenwich Mean Time and creates a date string with    
*       the help of `strftime()'.                                             
*                                                                             
*   INPUTS                                                                    
*       Buffer - a pointer to a buffer for the new string.                    
*       BuffSize - size of the Buffer for the date string.                    
*                                                                             
*   RESULT                                                                    
*       Returns the "OK" status code if it succesfully created the date       
*       string, "ERROR" otherwise. The only reason for this function should   
*       fail, is when the Buffer is not large enough.                         
*       As a side effect, if the function succeeds, Buffer will contain the   
*       current time and date in a format conforming to the HTTP              
*       specifications.                                                       
*                                                                             
*   BUGS                                                                      
*       Does not check if Buffer is NULL-pointer.                             
*                                                                             
*   SEE ALSO                                                                  
*       RFC 2068: Hypertext Transfer Protocol -- HTTP/1.1                     
*                                                                             
******************************************************************************
*
*/

rc_t HTTP_Date( char *Buffer, size_t BuffSize )
{
  time_t         systime;
  time_t        *time_ptr;
  struct tm     *tm_ptr;
  size_t         strsize;

  time_ptr = &systime;
  time( time_ptr );

  /* HTTP Date:  "wdy, dd mmm yyyy hh:mm:ss GMT"  */

  tm_ptr = gmtime( time_ptr );
  strsize = strftime( Buffer, BuffSize, "%a, %d %b %Y %H:%M:%S GMT", tm_ptr );
  if( strsize == BuffSize )
    return( ERROR );
  else
    return( OK );
}