Ondrej Filip
028a4cfc02
Let's go for 1.0.11.
2005-02-20 04:28:55 +00:00
Ondrej Filip
c025b85273
Real write is only in sk_maybe_write. Previous change partially reverted.
...
Thank you MJ.
2005-02-14 23:15:04 +00:00
Ondrej Filip
7c49f71559
Added s->err_hook wrapper that empties socket.
2005-02-14 21:28:51 +00:00
Ondrej Filip
030d3b387e
Small changed to reduce the number of warnings.
2005-02-14 11:58:46 +00:00
Ondrej Filip
75c1c58519
Yes, I'd like to go to 1.0.10
2005-02-14 11:37:40 +00:00
Ondrej Filip
0d3effcf8c
Time added in password management.
2005-02-12 22:27:55 +00:00
Ondrej Filip
777acf91bb
Everything is tested and works. I thins it's right time to go to 1.0.9.
2004-07-14 21:47:39 +00:00
Ondrej Filip
09e4117cc1
sk_write bugfix for BSD.
2004-06-18 12:54:53 +00:00
Ondrej Filip
b7e9c74cba
Used parameter can be marked as unused. :-) Thanx MJ.
2004-06-07 16:51:23 +00:00
Ondrej Filip
282997f21e
Some new warnings eliminated.
2004-06-07 10:00:29 +00:00
Ondrej Filip
19d9e30336
Marked unused parameters as unused.
2004-06-07 09:52:15 +00:00
Ondrej Filip
fb257e43fc
Deleted some unused code.
2004-06-07 09:09:14 +00:00
Ondrej Filip
41c8976e29
Test old instance of BIRD.
2004-06-06 17:05:25 +00:00
Martin Mares
9831e5916f
Staticized lots of local functions.
2004-06-05 09:58:23 +00:00
Martin Mares
6578a60493
Marked unused parameters in sysdep code as such.
2004-06-05 09:11:07 +00:00
Martin Mares
e98bc2ea9b
Renamed log() to log_msg(), but still keeping the old name as a macro.
...
This is done to avoid clashes with gcc-3.3 which has built-in logarithms :)
2004-06-05 09:05:12 +00:00
Martin Mares
4da25acb0a
Cleaned up sk_reallocate() and friends.
...
Also, removed the `if (s)' test, because I believe that as the whole
socket interface doesn't accent NULL pointers, sk_reallocate() shouldn't
be the only exception.
2004-06-05 08:56:43 +00:00
Ondrej Filip
e7ef86a58c
OSPF is ready for changing MTU.
2004-06-04 18:51:29 +00:00
Ondrej Filip
85305e5d8f
typo in README
2004-06-04 17:32:38 +00:00
Ondrej Filip
7d72aadb8a
CONFIG_SKIP_MC_BIND added.
...
BSD hates it, Linux needs it.
2004-06-03 08:18:14 +00:00
Ondrej Filip
cb4dd4e2f7
Deleted useless rfree. (Socked was freed by cli_free())
2004-06-02 15:14:49 +00:00
Ondrej Filip
7048461df1
Code clean up.
2004-06-01 13:58:39 +00:00
Ondrej Filip
8281ff201e
Reverting last patch.
2004-06-01 12:57:13 +00:00
Ondrej Filip
77772dbc65
Caching loopback interface.
2004-06-01 10:55:10 +00:00
Ondrej Filip
a8bb459a3f
log->DBG
2004-06-01 10:53:30 +00:00
Ondrej Filip
1554cc0282
Minor changes caused by MJ's comment.
2004-06-01 10:45:28 +00:00
Ondrej Filip
b613b9928b
#ifdef CONFIG_UNIX_DONTROUTE added.
2004-06-01 10:32:02 +00:00
Ondrej Filip
402a9fa78a
Useles log()s deleted.
2004-06-01 09:10:11 +00:00
Ondrej Filip
e85bd57a0e
bzero has 2 arguments.
2004-06-01 09:07:16 +00:00
Ondrej Filip
b88a1d4040
memset -> bzero
2004-06-01 08:59:47 +00:00
Martin Mares
ea0ac8f69a
Move CLI socket to the newly created CLI's pool.
...
(thanks to Andreas for the original idea)
2004-05-31 22:00:18 +00:00
Martin Mares
38a608c55a
Rewritten the I/O loop. All socket operations are now safe, meaning that
...
you can delete the socket from anywhere in the hooks and nothing should break.
Also, the receive/transmit buffers are now regular xmalloc()'ed buffers,
not separate resources which would need shuffling around between pools.
sk_close() is gone, use rfree() instead.
2004-05-31 21:48:19 +00:00
Martin Mares
5f2a6a9ff3
Fix handling on full pipe to client in bird. Prevent packet overflows
...
for even only medium sized route table output. Fix a strange garbled
output problem in the client. The latter seems to be caused by some
library doing tcflush while there is still command output pending. So
the best fix here is to do fflush and then tcdrain. Note that this
problem occurs only under certain load situations and is not too easy to
reproduce.
(by Andreas)
2004-05-31 17:55:30 +00:00
Ondrej Filip
c222500d8e
Previous change was mistake.
2004-05-31 17:00:22 +00:00
Ondrej Filip
b1a1fabac7
*BSD port added. (Tested on FreeBSD and NetBSD)
2004-05-31 13:25:00 +00:00
Ondrej Filip
bf135bcb1f
Prepared for release 1.0.8.
2003-09-01 08:46:07 +00:00
Martin Mares
c197d44e17
This probably IS the memory leak we're looking for. Alien routes weren't
...
correctly disposed of.
2003-08-13 22:07:55 +00:00
Martin Mares
f240a133b3
Releasing version 1.0.6.
2003-04-06 19:42:28 +00:00
Martin Mares
abf06173a3
Current Linux kernels don't remember rtm_protocol for IPv6 routes and supply RTPROT_BOOT instead.
...
Work around that.
2003-02-22 23:06:32 +00:00
Martin Mares
8001948b43
Report link-scope addresses as well.
2003-02-22 22:38:15 +00:00
Martin Mares
7d875e094b
Added missing includes.
2002-11-13 08:47:06 +00:00
Martin Mares
a19cd81100
Added missing #include and wondering how could it ever compile.
2002-11-13 08:30:56 +00:00
Martin Mares
5fc7c5c513
Don't loop forever when trying to skip an out-sequence netlink reply.
2001-08-03 08:44:51 +00:00
Ondrej Filip
c48b33292b
Yes, 1.0.5 released.
2001-06-09 15:13:38 +00:00
Martin Mares
01b776e117
Fixed <time.h> vs. <sys/time.h> problems.
2001-03-06 13:40:39 +00:00
Ondrej Filip
fdb1998202
Serious bug in ext lsa origination found. Going for 1.0.4.
2000-09-03 22:18:40 +00:00
Ondrej Filip
19e930a9bb
Version 1.0.3 released.
2000-09-03 17:53:12 +00:00
Ondrej Filip
a24e315762
Released as version 1.0.2.
2000-08-23 06:51:26 +00:00
Martin Mares
fc12a680b1
Released as version 1.0.1.
2000-06-21 22:08:46 +00:00
Martin Mares
2836ce3951
Check broadcast address sanity before believing it.
2000-06-21 09:58:09 +00:00
Martin Mares
f9eb8f7e06
If compiled with --enable-debug, don't even try to log to syslog unless
...
the user forces it in the config file.
2000-06-19 23:50:02 +00:00
Martin Mares
ca00d4a13a
Fix numbering of routing tables in IPv6 version.
2000-06-18 19:49:32 +00:00
Martin Mares
4daf03e513
Use our own SUN_LEN if libc doesn't provide it.
2000-06-16 23:12:47 +00:00
Martin Mares
5ddf4a58f9
During initialization, log to both syslog and stderr. When a configuration
...
file has been read and it doesn't specify any logging, log to syslog only
(if syslog is not available, then stderr).
2000-06-09 07:32:57 +00:00
Martin Mares
0b3bf4b1d8
Use SUN_LEN() for length of UNIX domain addresses. This should fix problems
...
with connection to clients on libc5 machines.
2000-06-09 07:30:22 +00:00
Martin Mares
2d176ac5d2
Released as 1.0.0, but marked it as a BETA version.
2000-06-09 06:45:48 +00:00
Martin Mares
725270cb1d
Fixes for the programmer's manual.
2000-06-08 12:37:21 +00:00
Martin Mares
c62d1c19a9
... as well there.
2000-06-08 10:48:51 +00:00
Martin Mares
ec423cc725
Updated CLI helps.
2000-06-08 10:25:02 +00:00
Martin Mares
58f7d004fd
Fixes to the progdoc.
2000-06-07 13:25:53 +00:00
Martin Mares
2e9b24211a
Spelling fixes to progdoc.
2000-06-07 12:29:08 +00:00
Martin Mares
73275d855d
Documented all the sysdeps (only briefly, I admit).
...
Except for Filters, RIP and OSPF, the progdocs are complete.
2000-06-05 12:49:04 +00:00
Martin Mares
525fa2c1f0
Documented sockets, events and timers.
2000-06-05 12:19:12 +00:00
Martin Mares
10304bed43
Split random number functions off io.c, so that they can be documented
...
separately.
2000-06-05 11:46:40 +00:00
Martin Mares
df49d4e14b
Removed lots of trailing newlines in log messages.
...
Please note that the only calls which don't add newlines automatically
(i.e., don't print a full line of output) are debug() and DBG().
2000-06-04 19:56:06 +00:00
Martin Mares
b594ad2386
tm_format_reltime() works with both past and future timestamps.
2000-06-01 15:13:23 +00:00
Martin Mares
4a91150175
Updated for new scope handling.
...
Also, provide proper address scopes in struct ifa.
2000-06-01 12:58:41 +00:00
Martin Mares
2f5e5ff9d6
Before configuration file is read, log to _both_ syslog and stderr.
2000-05-31 22:28:36 +00:00
Martin Mares
fcb5f4a725
Updated all the Doc files to new format.
2000-05-31 11:30:18 +00:00
Martin Mares
4761efdb43
Tracing of CLI connections/commands can be now controlled
...
by `debug commands <level>' in the configuration. Level 0 means
no tracing, 1 means connections only, 2 includes all commands.
2000-05-29 22:10:18 +00:00
Martin Mares
e67af42805
Support --version and --help.
2000-05-29 21:58:35 +00:00
Martin Mares
f990fc61e0
When in persist mode, don't delete routes from kernel tables even if
...
they cease to exist in our routing tables due to protocols having shut down.
2000-05-16 13:36:38 +00:00
Martin Mares
02bd064ab7
Adapted to new rt_notify semantics.
2000-05-13 11:02:02 +00:00
Martin Mares
0e5aa966cc
Multicast problems should be gone, although the fix is Linux only and we'll
...
need to figure out something better when working on new ports.
2000-05-11 16:30:56 +00:00
Martin Mares
109c2f6cf3
If a broadcast address is missing, go fake one.
2000-05-11 12:30:06 +00:00
Martin Mares
5ff0a270cb
In non-debug mode, set default logging to syslog only, not stderr.
2000-05-08 22:31:58 +00:00
Martin Mares
4524331a3d
Fixed type in daemonization code.
2000-05-08 22:31:34 +00:00
Martin Mares
0bcba21e89
When not debugging, daemonize automatically.
2000-05-08 19:10:36 +00:00
Martin Mares
cd44b46651
Forgot to add a spiky comment :)
2000-05-08 14:24:19 +00:00
Martin Mares
f9254d2349
Autoconf is *evil*. The sysconfdir and similar variables are unusable in
...
C includes as they contain substitutions specific to make.
Worked around by creating sysconf/paths.h which is created from
the Makefile instead of by the configure script.
2000-05-08 14:19:47 +00:00
Martin Mares
818ff1e2b7
When reporting a bug(), call abort() instead of exit(), so that we
...
can analyse the core.
2000-05-08 12:38:00 +00:00
Martin Mares
c304392e65
Some less socket error messages.
2000-05-08 12:37:39 +00:00
Martin Mares
9cbf43eb8a
Don't report refused connections.
2000-05-08 12:09:10 +00:00
Martin Mares
b6c9d8eb2e
Removed the `async' switch which was used for debugging only anyway.
...
Don't moan when netlink reports lost packets.
2000-05-08 12:05:55 +00:00
Martin Mares
94e935d8a2
Incoming buffer must be at least 8KB long.
2000-05-08 11:02:53 +00:00
Martin Mares
916c8c0aba
Use preferences properly.
2000-05-08 10:40:00 +00:00
Martin Mares
1151401e2b
Don't crash when reporting deleted routes.
...
Set preferences correctly.
2000-05-08 10:38:51 +00:00
Martin Mares
84f0700205
IPv6 support compiles on both glibc 2.0 and 2.1.
2000-05-06 21:46:09 +00:00
Martin Mares
ab1129c1bd
Added skeleton Doc files for the whole developer's documentation.
2000-05-05 17:17:42 +00:00
Martin Mares
9a220cabbc
#ifdef out lots of debugging information.
...
The long resource/routing table dump printed upon startup is gone now
and if you wish to see it, just send bird SIGUSR1 or use the `debug'
commands.
2000-05-04 20:52:28 +00:00
Martin Mares
93a786cb03
Removed a lot of unused variables.
...
Please try compiling your code with --enable-warnings to see them. (The
unused parameter warnings are usually bogus, the unused variable ones
are very useful, but gcc is unable to control them separately.)
2000-05-04 20:30:36 +00:00
Martin Mares
2edb31b097
Split CF_HDR section to CF_HDR (only includes) and CF_DEFINES (defines,
...
C declarations etc.).
2000-04-28 15:11:10 +00:00
Martin Mares
f75e3bbc01
Fixed a couple of nasty CLI bugs which were triggered on long or multi-part
...
outputs. It took a whole evening to hunt them down, but now the CLI seems
to work fine.
Now I run three BGP connections with several thousand routes!
2000-04-27 22:35:08 +00:00
Martin Mares
e1ddd99377
Changed handling of incoming connections, so that we can send data
...
from the send hook without worrying about existence of socket buffers.
Also, don't forget to copy peer addresses.
2000-04-26 13:26:11 +00:00
Martin Mares
0cadd5f531
Removed several FIXME's.
2000-04-26 12:33:37 +00:00
Martin Mares
00c0c18aea
Allow sk_close(NULL).
2000-04-25 23:07:47 +00:00
Martin Mares
f380aa60fa
IPv6 compiles with glibc 2.1.
2000-04-20 23:05:41 +00:00
Martin Mares
f2cb1d708d
Dropped CPU_NEEDS_ALIGN_* as unaligned.h no longer uses them.
2000-04-10 12:38:15 +00:00
Martin Mares
3991d84e8f
Changed initialization of protocol list -- now we call proto_build() instead
...
of calling the protocols manually.
Implemented printing of dynamic attributes in `show route all'.
Each protocol can now register its own attribute class (protocol->attr_class,
set to EAP_xxx) and also a callback for naming and formatting of attributes.
The callback can return one of the following results:
GA_UNKNOWN Attribute not recognized.
GA_NAME Attribute name recognized and put to the buffer,
generic code should format the value.
GA_FULL Both attribute name and value put to the buffer.
Please update protocols generating dynamic attributes to provide
the attr_class and formatting hook.
2000-04-01 10:19:47 +00:00
Martin Mares
a37410cbdd
Use bsprintf() instead of sprintf().
2000-03-31 23:33:03 +00:00
Martin Mares
221135d6bf
Include "lib/string.h" instead of <string.h>. It should give us bzero()
...
and other non-portable functions on all systems.
2000-03-31 23:30:21 +00:00
Martin Mares
320f417357
Defined sk_close() which closes the socket safely even if called from
...
socket hook. Replaces the SK_DELETED hack.
Squashed a couple of bugs in handling of TCP sockets.
2000-03-30 10:43:37 +00:00
Martin Mares
1cf716f075
Handle EINPROGRESS properly.
...
Set IP_DONTROUTE sockopt only if sk->ttl == 1.
2000-03-20 21:49:21 +00:00
Martin Mares
f098e072be
Fixed a bunch of FIXME's by removing them :)
2000-03-12 22:53:05 +00:00
Martin Mares
7a88832e78
Added tm_format_datetime().
2000-03-12 22:43:13 +00:00
Martin Mares
a92bebe0ec
Yet another LOCAL_DEBUG turned off.
2000-03-12 21:58:51 +00:00
Martin Mares
832fa033b7
Cleaned up debugging in kernel syncer. Netlink has still LOCAL_DEBUG
...
turned on, but after some testing I'll gag it.
2000-03-12 21:54:39 +00:00
Martin Mares
6b9fa32080
Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,
...
several debug() calls converted to DBG().
2000-03-12 21:01:38 +00:00
Martin Mares
c801e1fbab
Renamed command shutdown' to
down', so that `s' can be used as an
...
abbreviation for `show'.
2000-03-07 20:09:35 +00:00
Martin Mares
b9626ec6ea
Garbage collector events and counters are now per table and one day
...
they can be made configurable if it turns out to be useful.
2000-03-04 22:21:06 +00:00
Martin Mares
d07bab3997
ipa_opposite hack is not applicable in IPv6.
2000-03-01 11:29:30 +00:00
Martin Mares
6a636392d3
Rewrote interface type detection logic. The `unnumbered' flag is now per
...
address, not per interface (hence it's ifa->flags & IA_UNNUMBERED) and
should be set reliably. IF_MULTIACCESS should be fixed now, but it isn't
wise to rely on it on interfaces configured with /30 prefix.
2000-02-29 23:19:52 +00:00
Martin Mares
9fac310d1a
Put client on a stony ground. The whole client is going to be system-specific
...
(the current version UNIX-specific) anyway, so it's useless to try splitting it
to sysdep and generic part. Instead of this, configure script decides (based on
system type and user's wish) what (if any) client should be built and what
autoconfiguration it requires. Also, the client provides its own die/bug/...
functions.
2000-01-19 15:07:00 +00:00
Martin Mares
3ea1ba632b
Killed protocol->priority. Protocol startup should be clean and hack-free now.
...
It seems everything still works (except for disable/enable/restart which hangs
sometimes, but it's another story).
2000-01-18 11:01:03 +00:00
Martin Mares
aa8761de94
Kernel route syncer now supports dynamic reconfiguration. Also it doesn't
...
depend on the startup counter hack now and uses a zero-time timer instead
to make itself scheduled after normal protocol startup.
2000-01-18 10:39:30 +00:00
Martin Mares
fb89b1a4ce
Removed point-to-point tunnel hack as it breaks ordinary PtP interfaces.
...
I'll find a better solution soon.
2000-01-17 12:40:00 +00:00
Martin Mares
d272fe22dd
Separated `official protocol names' used in status dumps from name templates
...
used for automatic generation of instance names.
protocol->name is the official name
protocol->template is the name template (usually "name%d"),
should be all lowercase.
Updated all protocols to define the templates, checked that their configuration
grammar includes proto_name which generates the name and interns it in the
symbol table.
2000-01-17 11:52:50 +00:00
Martin Mares
f7fcb75252
Reconfiguration for device protocol.
2000-01-17 11:17:33 +00:00
Martin Mares
99278e1042
Wording changes.
2000-01-16 23:36:19 +00:00
Martin Mares
bf8558bc9c
Converted shutdown to a kind of reconfiguration, it's no more handled
...
as a exception in protocol state machines. Introduced a `shutdown'
CLI command. Killed few reconfiguration bugs.
2000-01-16 17:40:26 +00:00
Martin Mares
50fe90edf3
First attempt on dynamic reconfiguration. There are still lots of bugs
...
and problems to solve, but the hardest part works.
2000-01-16 16:44:50 +00:00
Martin Mares
476e108425
Minor cleanups.
1999-12-16 13:51:43 +00:00
Martin Mares
e693ddff87
Handle cases when SIOCGIFINDEX is defined, but doesn't work (new glibc
...
with 2.0 kernels).
1999-12-16 13:23:32 +00:00
Martin Mares
a2867cd957
Better order of includes.
...
set_inaddr() moved to sysio.h.
1999-12-16 13:14:02 +00:00
Martin Mares
67ece6df42
Tried to clean up multicast handling. Now we don't try to guess
...
multicast abilities depending on definedness of symbols and use hard-wired
system-dependent configuration defines instead.
Please test whereever you can.
1999-12-16 13:06:13 +00:00
Martin Mares
f545d38707
Added universal locking mechanism which will solve problems
...
with protocols wanting to use the same port on the same interface
during reconfiguration time.
How to use locks: In the if_notify hook, just order locks for the
interfaces you want to work with and do the real socket opening after the
lock hook function gets called. When you stop using the socket, close
it and rfree() the lock.
Please update your protocols to use the new locking mechanism.
1999-12-09 18:54:20 +00:00
Martin Mares
30bc402ebb
Temporary work-arounds for multicast problems. Needs further investigation.
1999-12-08 15:12:54 +00:00
Martin Mares
0da472d7e8
Except for special protocols (nowadays only the kernel syncer), don't
...
export host and link scope routes.
1999-12-08 14:16:13 +00:00
Martin Mares
dc82daaa9b
- Path to control socket is selectable via command-line option.
...
- die() when control socket open failed.
1999-12-08 13:20:19 +00:00
Martin Mares
f78056fb2c
Allow logging to stderr as well.
1999-12-06 13:51:04 +00:00
Martin Mares
a0c37b45e5
Logging is now configurable. You can define multiple log outputs (to both
...
files and syslog) and assign lists of message categories to each of them.
1999-12-06 13:45:56 +00:00
Martin Mares
a9c986f981
Added tracked_fopen() which is a fopen registered in resource database.
...
Will be used for log files.
1999-12-06 13:43:47 +00:00
Martin Mares
34350a5270
Implemented echoing of log messages to CLI connections. Just try `echo all'.
1999-12-06 12:34:45 +00:00
Martin Mares
afa8937ac8
Added tm_format_reltime() for formatting of relative time quantities.
1999-12-01 11:59:00 +00:00
Martin Mares
487d1afa52
Moved TIME_INFINITY to timer.h, so that it's publicly available.
1999-11-30 14:01:39 +00:00
Martin Mares
30770df2ab
If the main event queue is not empty, call select() with zero timeout, so
...
that the events are ran again after the FD's are checked. This allows us
to schedule I/O checks between processing of user commands.
1999-11-17 12:04:24 +00:00
Martin Mares
2727bb7c5b
Renamed attr->attrs to attr->eattrs.
1999-11-04 13:29:43 +00:00
Martin Mares
b9672a845f
The CLI I/O functions work as desired.
1999-10-31 15:43:44 +00:00
Martin Mares
7d3aab1c16
First steps of the Command Line Interface: I/O routines.
1999-10-29 12:10:10 +00:00
Martin Mares
b93abffae4
Implemented unix-domain sockets.
1999-10-29 12:09:29 +00:00
Martin Mares
54165b1315
Configure PATH_CONTROL_SOCKET.
...
autoconf.h is now written to obj/sysdep, the source tree is hopefully
completely read-only now.
1999-10-29 10:08:09 +00:00
Martin Mares
ed6081502a
Added skeleton of the client. Does nothing, but at least compiles.
1999-10-29 09:44:44 +00:00
Martin Mares
f782b72c53
Failure to set socket TOS is not a fatal error.
1999-10-02 11:06:44 +00:00
Martin Mares
f651941402
Added a function for generating 32-bit random numbers.
1999-08-17 20:47:40 +00:00
Martin Mares
4532a89e31
Taught Netlink how to behave in IPv6 world.
1999-08-03 19:37:37 +00:00
Martin Mares
4f22c98185
Support for IPv6 sockets. How nice one doesn't have to ifdef around
...
ten years of API evolution :-)
1999-08-03 19:36:51 +00:00
Martin Mares
dce267832a
Basic support for IPv6. The system-dependent part doesn't work yet,
...
but the core routines are there and seem to be working.
o lib/ipv6.[ch] written
o Lexical analyser recognizes IPv6 addresses and when in IPv6
mode, treats pure IPv4 addresses as router IDs.
o Router ID must be configured manually on IPv6 systems.
o Added SCOPE_ORGANIZATION for org-scoped IPv6 multicasts.
o Fixed few places where ipa_(hton|ntoh) was called as a function
returning converted address.
1999-08-03 19:36:06 +00:00
Martin Mares
7de45ba4a0
Kernel route syncer supports multiple tables.
...
The changes are just too extensive for lazy me to list them
there, but see the comment at the top of sysdep/unix/krt.c.
The code got a bit more ifdeffy than I'd like, though.
Also fixed a bunch of FIXME's and added a couple of others. :)
1999-08-03 19:33:22 +00:00
Martin Mares
9273035403
Changes to interface handling on traditional Unices:
...
o Aliases are interpreted as secondary addresses.
o When the system doesn't supply interface indices, generate
our ones.
1999-08-03 19:30:20 +00:00
Martin Mares
913f7dc9f2
Added functions for parsing and formatting of dates.
1999-08-03 19:29:27 +00:00