1 /* This software was written by Dirk Engling <erdgeist@erdgeist.org>
2    It is considered beerware. Prost. Skol. Cheers or whatever.
3 
4    $id$ */
5 
6 #ifndef OT_MUTEX_H__
7 #define OT_MUTEX_H__
8 
9 #include <sys/uio.h>
10 
11 void mutex_init( );
12 void mutex_deinit( );
13 
14 ot_vector *mutex_bucket_lock( int bucket );
15 ot_vector *mutex_bucket_lock_by_hash( ot_hash hash );
16 
17 void mutex_bucket_unlock( int bucket, int delta_torrentcount );
18 void mutex_bucket_unlock_by_hash( ot_hash hash, int delta_torrentcount );
19 
20 size_t mutex_get_torrent_count();
21 
22 typedef enum {
23   TASK_STATS_CONNS                 = 0x0001,
24   TASK_STATS_TCP                   = 0x0002,
25   TASK_STATS_UDP                   = 0x0003,
26   TASK_STATS_SCRAPE                = 0x0004,
27   TASK_STATS_FULLSCRAPE            = 0x0005,
28   TASK_STATS_TPB                   = 0x0006,
29   TASK_STATS_HTTPERRORS            = 0x0007,
30   TASK_STATS_VERSION               = 0x0008,
31   TASK_STATS_BUSY_NETWORKS         = 0x0009,
32   TASK_STATS_RENEW                 = 0x000a,
33   TASK_STATS_SYNCS                 = 0x000b,
34   TASK_STATS_COMPLETED             = 0x000c,
35   TASK_STATS_NUMWANTS              = 0x000d,
36 
37   TASK_STATS                       = 0x0100, /* Mask */
38   TASK_STATS_TORRENTS              = 0x0101,
39   TASK_STATS_PEERS                 = 0x0102,
40   TASK_STATS_SLASH24S              = 0x0103,
41   TASK_STATS_TOP10                 = 0x0104,
42   TASK_STATS_TOP100                = 0x0105,
43   TASK_STATS_EVERYTHING            = 0x0106,
44   TASK_STATS_FULLLOG               = 0x0107,
45   TASK_STATS_WOODPECKERS           = 0x0108,
46 
47   TASK_FULLSCRAPE                  = 0x0200, /* Default mode */
48   TASK_FULLSCRAPE_TPB_BINARY       = 0x0201,
49   TASK_FULLSCRAPE_TPB_ASCII        = 0x0202,
50   TASK_FULLSCRAPE_TPB_ASCII_PLUS   = 0x0203,
51   TASK_FULLSCRAPE_TPB_URLENCODED   = 0x0204,
52   TASK_FULLSCRAPE_TRACKERSTATE     = 0x0205,
53 
54   TASK_DMEM                        = 0x0300,
55 
56   TASK_DONE                        = 0x0f00,
57 
58   TASK_FLAG_GZIP                   = 0x1000,
59   TASK_FLAG_BZIP2                  = 0x2000,
60 
61   TASK_TASK_MASK                   = 0x0fff,
62   TASK_CLASS_MASK                  = 0x0f00,
63   TASK_FLAGS_MASK                  = 0xf000
64 } ot_tasktype;
65 
66 typedef unsigned long ot_taskid;
67 
68 int       mutex_workqueue_pushtask( int64 sock, ot_tasktype tasktype );
69 void      mutex_workqueue_canceltask( int64 sock );
70 void      mutex_workqueue_pushsuccess( ot_taskid taskid );
71 ot_taskid mutex_workqueue_poptask( ot_tasktype *tasktype );
72 int       mutex_workqueue_pushresult( ot_taskid taskid, int iovec_entries, struct iovec *iovector );
73 int64     mutex_workqueue_popresult( int *iovec_entries, struct iovec ** iovector );
74 
75 #endif
76