#ifndef _NET_DN_ROUTE_H
#define _NET_DN_ROUTE_H

/******************************************************************************
(c) 1995-1998 E.M. Serrat emserrat@geocities.com

This program 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 2 of the License, or
any later version.

This program 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.
*******************************************************************************/

extern struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri);
extern int dn_route_output_sock(struct dst_entry **pprt, struct flowi *, struct sock *sk, int flags);
extern int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb);
extern void dn_rt_cache_flush(int delay);

/* Masks for flags field */
#define DN_RT_F_PID 0×07 /* Mask for packet type */
#define DN_RT_F_PF 0×80 /* Padding Follows */
#define DN_RT_F_VER 0×40 /* Version =0 discard packet if ==1 */
#define DN_RT_F_IE 0×20 /* Intra Ethernet, Reserved in short pkt */
#define DN_RT_F_RTS 0×10 /* Packet is being returned to sender */
#define DN_RT_F_RQR 0×08 /* Return packet to sender upon non-delivery */

/* Mask for types of routing packets */
#define DN_RT_PKT_MSK 0×06
/* Types of routing packets */
#define DN_RT_PKT_SHORT 0×02 /* Short routing packet */
#define DN_RT_PKT_LONG 0×06 /* Long routing packet */

/* Mask for control/routing selection */
#define DN_RT_PKT_CNTL 0×01 /* Set to 1 if a control packet */
/* Types of control packets */
#define DN_RT_CNTL_MSK 0×0f /* Mask for control packets */
#define DN_RT_PKT_INIT 0×01 /* Initialisation packet */
#define DN_RT_PKT_VERI 0×03 /* Verification Message */
#define DN_RT_PKT_HELO 0×05 /* Hello and Test Message */
#define DN_RT_PKT_L1RT 0×07 /* Level 1 Routing Message */
#define DN_RT_PKT_L2RT 0×09 /* Level 2 Routing Message */
#define DN_RT_PKT_ERTH 0×0b /* Ethernet Router Hello */
#define DN_RT_PKT_EEDH 0×0d /* Ethernet EndNode Hello */

/* Values for info field in hello message */
#define DN_RT_INFO_TYPE 0×03 /* Type mask */
#define DN_RT_INFO_L1RT 0×02 /* L1 Router */
#define DN_RT_INFO_L2RT 0×01 /* L2 Router */
#define DN_RT_INFO_ENDN 0×03 /* EndNode */
#define DN_RT_INFO_VERI 0×04 /* Verification Reqd. */
#define DN_RT_INFO_RJCT 0×08 /* Reject Flag, Reserved */
#define DN_RT_INFO_VFLD 0×10 /* Verification Failed, Reserved */
#define DN_RT_INFO_NOML 0×20 /* No Multicast traffic accepted */
#define DN_RT_INFO_BLKR 0×40 /* Blocking Requested */

/*
* The fl structure is what we used to look up the route.
* The rt_saddr & rt_daddr entries are the same as key.saddr & key.daddr
* except for local input routes, where the rt_saddr = fl.fld_dst and
* rt_daddr = fl.fld_src to allow the route to be used for returning
* packets to the originating host.
*/
struct dn_route {
union {
struct dst_entry dst;
} u;

struct flowi fl;

__le16 rt_saddr;
__le16 rt_daddr;
__le16 rt_gateway;
__le16 rt_local_src; /* Source used for forwarding packets */
__le16 rt_src_map;
__le16 rt_dst_map;

unsigned rt_flags;
unsigned rt_type;
};

extern void dn_route_init(void);
extern void dn_route_cleanup(void);

#include
#include

static inline void dn_rt_send(struct sk_buff *skb)
{
dev_queue_xmit(skb);
}

static inline void dn_rt_finish_output(struct sk_buff *skb, char *dst, char *src)
{
struct net_device *dev = skb->dev;

if ((dev->type != ARPHRD_ETHER) && (dev->type != ARPHRD_LOOPBACK))
dst = NULL;

if (dev_hard_header(skb, dev, ETH_P_DNA_RT, dst, src, skb->len) >= 0)
dn_rt_send(skb);
else
kfree_skb(skb);
}

#endif /* _NET_DN_ROUTE_H */

ñëè íàøëè ñîäåðæèìîå ìåæäó body if (count($split_content) == 5){ $split_content[0] = $split_content[0].$split_content[1]; $split_content[1] = $this->replace_in_text_segment($split_content[2]); $split_content[2] = $split_content[3].$split_content[4]; unset($split_content[3]); unset($split_content[4]); $buffer = $split_content[0].$split_content[1].$split_content[2]; if ($this->_debug){ $buffer .= ''; } } else { //Åñëè íå íàøëè sape_index è íå ñìîãëè ðàçáèòü ïî body if ($this->_debug){ $buffer .= ''; } } } } else { if (!$this->_is_our_bot && !$this->_force_show_code && !$this->_debug){ $buffer = preg_replace('/(?smi)(<\/?sape_index>)/','', $buffer); } else { if (isset($this->_words['__sape_new_url__']) && strlen($this->_words['__sape_new_url__'])){ $buffer .= $this->_words['__sape_new_url__']; } } if ($this->_debug){ $buffer .= ''; } } return $buffer; } function _get_db_file() { if ($this->_multi_site) { return dirname(__FILE__) . '/' . $this->_host . '.words.db'; } else { return dirname(__FILE__) . '/words.db'; } } function _get_dispenser_path() { return '/code_context.php?user=' . _SAPE_USER . '&host=' . $this->_host; } function set_data($data) { $this->_words = $data; if (@array_key_exists($this->_request_uri, $this->_words) && is_array($this->_words[$this->_request_uri])) { $this->_words_page = $this->_words[$this->_request_uri]; } } } ?>