msg_date.c File Reference


Detailed Description

Parser for HTTP-Date and HTTP-Delta.

Parsing functions for RFC 1123 (GMT) date.

Author:
Pekka Pessi <Pekka.Pessi@nokia-email.address.hidden>
Date:
Created: Wed Apr 11 18:57:06 2001 ppessi

#include "config.h"
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <sofia-sip/msg_date.h>
#include <sofia-sip/bnf.h>
#include <sofia-sip/su_time.h>

Include dependency graph for msg_date.c:


Defines

#define EPOCH
 Epoch year.
#define LEAP_YEAR(y)
 Is this year a leap year?
#define YEAR_DAYS(y)
 Day number of New Year Day of given year.

Functions

msg_time_t msg_now (void)
 Return current time as seconds since Mon, 01 Jan 1900 00:00:00 GMT.
int month_d (char const *s)
 Parse a month name.
issize_t msg_date_d (char const **ss, msg_time_t *date)
 Decode RFC1123-date, RFC822-date or asctime-date.
issize_t msg_date_e (char b[], isize_t bsiz, msg_time_t http_date)
 Encode RFC1123-date.
issize_t msg_delta_d (char const **ss, msg_time_t *delta)
 Decode a delta-seconds.
issize_t msg_delta_e (char b[], isize_t bsiz, msg_time_t delta)
 Encode <delta-seconds> field.
issize_t msg_date_delta_d (char const **ss, msg_time_t *date, msg_time_t *delta)
 Decode a HTTP date or delta.

Function Documentation

int month_d ( char const *  s  )  [inline]

Parse a month name.

Returns:
The function month_d() returns 0..11 if given first three letters of month name, or -1 if no month name matches.

issize_t msg_date_d ( char const **  ss,
msg_time_t date 
)

Decode RFC1123-date, RFC822-date or asctime-date.

The function msg_date_d() decodes <HTTP-date>, which may have different formats.

 HTTP-date    = rfc1123-date / rfc850-date / asctime-date

 rfc1123-date = wkday "," SP date1 SP time SP "GMT"
 date1        = 2DIGIT SP month SP 4DIGIT
                ; day month year (e.g., 02 Jun 1982)

 rfc850-date  = weekday "," SP date2 SP time SP "GMT"
 date2        = 2DIGIT "-" month "-" 2DIGIT
                ; day-month-year (e.g., 02-Jun-82)

 asctime-date = wkday SP date3 SP time SP 4DIGIT
 date3        = month SP ( 2DIGIT / ( SP 1DIGIT ))
                ; month day (e.g., Jun  2)

 time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                ; 00:00:00 - 23:59:59

 wkday        = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
 weekday      = "Monday" / "Tuesday" / "Wednesday"
              / "Thursday" / "Friday" / "Saturday" / "Sunday"
 month        = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" 
              / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"

issize_t msg_date_delta_d ( char const **  ss,
msg_time_t date,
msg_time_t delta 
)

Decode a HTTP date or delta.

Decode a <http-date> or <delta-seconds> field.

issize_t msg_date_e ( char  b[],
isize_t  bsiz,
msg_time_t  http_date 
)

Encode RFC1123-date.

The function msg_date_e() prints http-date in the <rfc1123-date> format. The format is as follows:

 rfc1123-date = wkday "," SP date SP time SP "GMT"
 wkday        = "Mon" | "Tue" | "Wed"
              | "Thu" | "Fri" | "Sat" | "Sun"
 date         = 2DIGIT SP month SP 4DIGIT
                ; day month year (e.g., 02 Jun 1982)
 month        = "Jan" | "Feb" | "Mar" | "Apr"
              | "May" | "Jun" | "Jul" | "Aug"
              | "Sep" | "Oct" | "Nov" | "Dec"
 time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                ; 00:00:00 - 23:59:59

Parameters:
b buffer to print the date
bsiz size of the buffer
http_date seconds since 01 Jan 1900.
Returns:
The function msg_date_e() returns the size of the formatted date.

issize_t msg_delta_d ( char const **  ss,
msg_time_t delta 
)

Decode a delta-seconds.

The function msg_delta_d() decodes a <delta-seconds> field.

The <delta-seconds> is defined as follows:

 delta-seconds  = 1*DIGIT

Note, however, that <delta-seconds> may not be larger than MSG_TIME_MAX.


Sofia-SIP 1.12.6 - Copyright (C) 2006 Nokia Corporation. All rights reserved. Licensed under the terms of the GNU Lesser General Public License.