text:
/************************************************************************/
/*                                                                      */
/*  IpStack.c   Managment of the IPSTACK data structure                 */
/*              used to deal with the IP datagram and payload           */
/*                                                                      */
/************************************************************************/
/*  Author:     Keith Vogel                                             */
/*  Copyright 2013, Digilent Inc.                                       */
/************************************************************************/
/* deIP core network library
*
* Copyright (c) 2013-2014, Digilent <www.digilentinc.com>
* Contact Digilent for the latest version.
*
* This program is free software; distributed under the terms of
* BSD 3-clause license ("Revised BSD License", "New BSD License", or "Modified BSD License")
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1.    Redistributions of source code must retain the above copyright notice, this
*        list of conditions and the following disclaimer.
* 2.    Redistributions in binary form must reproduce the above copyright notice,
*        this list of conditions and the following disclaimer in the documentation
*        and/or other materials provided with the distribution.
* 3.    Neither the name(s) of the above-listed copyright holder(s) nor the names
*        of its contributors may be used to endorse or promote products derived
*        from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/************************************************************************/
/*  Module Description: 												*/
/*																		*/
/*	Code supporting adaptors to help build a frame for transmission  	*/
/*	or reception.   													*/
/*																		*/
/************************************************************************/
/*  Revision History:													*/
/*																		*/
/*	7/3/2012(KeithV): Created											*/
/*																		*/
/************************************************************************/

#include "deIP.h"
static HRRHEAP          g_hSocketHeap = NULL;

/*****************************************************************************
  Function:
	bool IPSInitScratchMemory(uint8_t pSMem, uint32_t cbSMem)

  Description:
        Creates a heap to be used to get some scratch memory for use with sockets
        In particular it will set up memory for sockets, ipStacks and Page manager headers.
        You MUST use IPGetScratchMemorySize(cEstSockets) to get the size needed for this

  Parameters:
	pSMem:      A pointer to the memory to use
        cbSMem:     How many bytes the memory is; must use IPGetScratchMemorySize(cEstSockets)

  Returns:
        None

  ***************************************************************************/
bool IPSInit(uint8_t * pScratchMem, uint32_t cbScratchMem, uint32_t cEstSockets)
{
    uint32_t cbSocketHeap = IPSGetSocketHeapSize(cEstSockets);

    // somewhere in the C only stack we need to init the board
    // this may be the wrong place to do it.
#if !defined(MPIDE)
    static fCallBoardInit = true;
    if(fCallBoardInit)
    {
        InitBoard();
        fCallBoardInit = false;
    }
#endif

    if(pScratchMem != NULL)
    {
        if(g_hSocketHeap != NULL || cbSocketHeap > cbScratchMem)
        {
            return(false);
        }

        g_hSocketHeap = RRHPInit(pScratchMem, cbSocketHeap);

        if(g_hSocketHeap == NULL)
        {
            IPSClearSocketHeap();
            return(false);
        }
    }

    // we do not want to define a default socket memory
    else
    {
        IPSClearSocketHeap();
    }

    LLInitAdaptorList();
    UDPInitSockets();
    TCPInitSockets();

    return(true);
}

void IPSClearSocketHeap(void)
{
    RRHPTerminate(g_hSocketHeap);
    g_hSocketHeap = NULL;
}

TCPSOCKET * IPSGetSocketFromSocketHeap(void)
{
    return(RRHPAlloc(g_hSocketHeap, sizeof(TCPSOCKET)));
}

void IPSReleaseSocket(TCPSOCKET * pSocket)
{
    if(pSocket != NULL)
    {
        RRHPFree(g_hSocketHeap, pSocket);
    }
}

uint16_t IPSGetPayloadFromAdaptor(IPSTACK * pIpStack, uint16_t cbAlloc)
{
    if(pIpStack != NULL)
    {

        // clean up the current payload
        if(pIpStack->pPayload != NULL)
        {
            // see if we can just use the current payload
            if(cbAlloc <= pIpStack->cbPayload)
            {
                memset(pIpStack->pPayload, 0, pIpStack->cbPayload);
                pIpStack->cbPayload = cbAlloc;
            }
            else if(pIpStack->fFreePayloadToAdp)
            {
                RRHPFree(pIpStack->pLLAdp->pNwAdp->hAdpHeap, pIpStack->pPayload);
            }

            pIpStack->pPayload = NULL;
            pIpStack->cbPayload = 0;
        }

        if( cbAlloc > pIpStack->cbPayload &&
            (pIpStack->pPayload = RRHPAlloc(pIpStack->pLLAdp->pNwAdp->hAdpHeap, cbAlloc)) != NULL)
        {
            pIpStack->cbPayload = cbAlloc;
            pIpStack->fFreePayloadToAdp = true;
        }

        return(pIpStack->cbPayload);
    }

    return(0);
}

IPSTACK * IPSGetIpStackFromAdaptor(const LLADP * pLLAdp, uint32_t type, IPSTATUS * pStatus)
{
    uint8_t * pIpStackBuff = NULL;
    IPSTACK * pIpStack = NULL;

    if(pLLAdp == NULL)
    {
        AssignStatusSafely(pStatus, ipsAdaptorMustBeSpecified);
        return(NULL);
    }
    else if(pLLAdp->pNwAdp->hAdpHeap == NULL)
    {
        AssignStatusSafely(pStatus, ispOutOfMemory);
        return(NULL);
    }

    if((pIpStackBuff = RRHPAlloc(pLLAdp->pNwAdp->hAdpHeap, IPStackEntrySize)) == NULL)
    {
        AssignStatusSafely(pStatus, ipsIpStackAllInUse);
        return(NULL);
    }

    if((pIpStack = IPSInitIpStack(pLLAdp, pIpStackBuff, type)) == NULL)
    {
        AssignStatusSafely(pStatus, ipsUnsupportedTransportProtocol);
        RRHPFree(pLLAdp->pNwAdp->hAdpHeap, pIpStackBuff);
        return(NULL);
    }

    AssignStatusSafely(pStatus, ipsSuccess);
    return(pIpStack);
}

IPSTACK * IPSInitIpStack(const LLADP * pLLAdp, uint8_t * pIpStackBuff, uint32_t type)
{
    IPSTACK * pIpStack = (IPSTACK *) pIpStackBuff;

    // nothing open
    if(pIpStackBuff == NULL)
    {
        return(NULL);
    }

    // take this one
    // build it up to a default IPSTACK with pointers set in
    // we are clearing more than the IPSTACK, we are clearing all of the
    // following space for the headers.
    memset(pIpStackBuff, 0, IPStackEntrySize);

    pIpStack->fFreeIpStackToAdp     = true;

    pIpStack->headerOrder           = MACHINE_ORDER;
    pIpStack->pLLAdp                = pLLAdp;

    pIpStack->pFrameII              = (((void *) pIpStack) + sizeof(IPSTACK));
    pIpStack->cbFrame               = sizeof(ETHERNETII_FRAME);

    pIpStack->pIPHeader             = (((void *) pIpStack->pFrameII) + sizeof(ETHERNETII_FRAME));

    if(ILIsIPv6(pLLAdp))
    {
        pIpStack->etherType         = ethertypeIPv6;
        pIpStack->cbIPHeader        = sizeof(IPv6HDR);
        pIpStack->pTransportHeader  = (pIpStack->pIPHeader + sizeof(IPv6HDR));
    }
    else
    {
        pIpStack->etherType         = ethertypeIPv4;
        pIpStack->cbIPHeader        = sizeof(IPv4HDR);
        pIpStack->pTransportHeader  = (pIpStack->pIPHeader + sizeof(IPv4HDR));
    }

    switch(type)
    {
        case ippnICMP:
            pIpStack->pTransportHeader	= NULL;
            pIpStack->cbTranportHeader 	= 0;
            pIpStack->protocol          = ippnICMP;
            break;

        case ippnTCP:
            pIpStack->cbTranportHeader 	= sizeof(TCPHDR);
            pIpStack->protocol          = ippnTCP;
            break;

        case ippnUDP:
            pIpStack->cbTranportHeader 	= sizeof(UDPHDR);
            pIpStack->protocol          = ippnUDP;
            break;

        case ethertypeARP:
            pIpStack->pTransportHeader	= NULL;
            pIpStack->cbTranportHeader 	= 0;
            pIpStack->pIPHeader         = NULL;
            pIpStack->cbIPHeader        = 0;
            pIpStack->etherType         = ethertypeARP;
            break;

        default:
            return(NULL);
    }

    // put some defaults in
    // from here in, the IPSTACK values could be wrong, but we are putting something in.
    pIpStack->pPayload                  = NULL;
    pIpStack->cbPayload                 = 0;

    // build up the stack and headers with defaults
    // broadcast MAC and IP
    // protocol assumes TCP, but that can be changed later.
    // this should be an assert, it should never fail as this is
    // built from scratch and there should be no errors
    if(!IPSConstructIpStackHeaders(pIpStack, NULL))
    {
        return(NULL);
    }

    return(pIpStack);
}

IPSTACK *  IPSRelease(IPSTACK * pIpStack)
{
    if(pIpStack != NULL)
    {
        // the only way fHeldBySend can be set is if we
        // did a LLSend and it is on the wait for send stack
        // will be released automatically when the send is done
        // If it is on the send stack, we do not do anything.

        if(!IPSIsInUse(pIpStack))
        {
            // if we actually free something, then and only then clear the pointers
            // This payload may be resused in things like ARP; but are not allocated in the scratch heap
            if(pIpStack->fFreePayloadToAdp)
            {
                pIpStack->fFreePayloadToAdp = false;
                RRHPFree(pIpStack->pLLAdp->pNwAdp->hAdpHeap, pIpStack->pPayload);
                pIpStack->pPayload = NULL;
                pIpStack->cbPayload = 0;
            }

            if(pIpStack->fFreeIpStackToAdp)
            {
                pIpStack->fFreeIpStackToAdp = false;
                RRHPFree(pIpStack->pLLAdp->pNwAdp->hAdpHeap, pIpStack);
            }
        }
    }

    return(NULL);
}

IPSTACK *  IPSRefresh(IPSTACK * pIpStack, const LLADP * pLLAdp, IPSTATUS * pStatus)
{
    AssignStatusSafely(pStatus, ipsSuccess);
    if(pIpStack == NULL)
    {
        pIpStack = IPSGetIpStackFromAdaptor(pLLAdp, ippnTCP, pStatus);
    }
    else
    {
        pIpStack =  IPSSwapSrcAndDest(pIpStack);
    }

    if(pIpStack != NULL)
    {
        // the payload may have a pointer in it that we are going to clear
        // that pointer may or may not be from the heap; but if it is not from
        // the heap, the pointer will be outside of the heap ranage and be ignored
        // by the heap manager with no damage.
        if(pIpStack->fFreePayloadToAdp)
        {
            RRHPFree(pIpStack->pLLAdp->pNwAdp->hAdpHeap, pIpStack->pPayload);
        }
        pIpStack->cbPayload             = 0;
        pIpStack->pPayload              = NULL;

        switch(pIpStack->protocol)
        {
            case ippnUDP:
                pIpStack->pUDPHdr->cbHdrData    = sizeof(UDPHDR);
                pIpStack->pUDPHdr->checksum     = 0;
                break;

            case ippnTCP:
                pIpStack->pTCPHdr->u16Flags     = 0;
                pIpStack->pTCPHdr->dataOffset   = sizeof(TCPHDR)/sizeof(uint32_t);
                pIpStack->pTCPHdr->urgentPtr    = 0;
                pIpStack->pTCPHdr->checksum     = 0;
                break;

            default:
                break;
        }
    }

    return(pIpStack);
}

// this puts to order and fills in all of the stack pointers
// payload must at least point to the frame
// or it must already be parsed, it can just change order
bool IPSParseToOrder(IPSTACK * pIpStack, uint32_t Order)
{
    uint32_t        state               = ipsIpStackNotParsed;
    const bool      fInMachineOrder     = (pIpStack->headerOrder == MACHINE_ORDER);
    const bool      fSwitchingOrder     = (pIpStack->headerOrder != Order);
    bool            fInMachineOrderT    = fInMachineOrder;
    uint16_t        cbT                 = 0;
    uint16_t        etpnT               = 0;

    // see if we are already done.
    if(pIpStack->fFrameIsParsed && !fSwitchingOrder)
    {
        return(true);
    }

    while(state != ipsSuccess)
    {
        switch(state)
        {

            // in the first state we must get the frame info
            case ipsIpStackNotParsed:

                fInMachineOrderT = fInMachineOrder;

                // if parsed, just get our size
                if(pIpStack->fFrameIsParsed)
                {
                    cbT = pIpStack->cbFrame;
                }

                // if not parsed, what we are parsing is in the payload pointer
                else
                {
                    pIpStack->pFrameII  = (ETHERNETII_FRAME *) pIpStack->pPayload;
                    cbT = pIpStack->cbPayload;
                }

                // if we are switching order
                if(fSwitchingOrder)
                {
                    cbT = ExEthernetFrameHeader(pIpStack->pFrameII, cbT, fInMachineOrderT);
                    fInMachineOrderT = !fInMachineOrder;
                }

                if(cbT < sizeof(ETHERNETII_FRAME))
                {
                    state = ipsIpStackParsingError;
                    break;
                }

                pIpStack->etherType = pIpStack->pFrameII->etherType;
                if(!fInMachineOrderT)
                {
                    ExEndian(&pIpStack->etherType, sizeof(ETHERTYPE));
                }

                pIpStack->fIEEE802Frame = IsIEEE802(pIpStack->etherType);
                if(pIpStack->fIEEE802Frame)
                {
                    if(cbT < sizeof(ETHERNET_802_FRAME))
                    {
                        state = ipsIpStackParsingError;
                        break;
                    }

                    pIpStack->etherType = pIpStack->pFrame802->snap.etherType;
                    if(!fInMachineOrderT)
                    {
                        ExEndian(&pIpStack->etherType, sizeof(ETHERTYPE));
                    }
                    pIpStack->cbFrame = sizeof(ETHERNET_802_FRAME);
                }
                else
                {
                    pIpStack->cbFrame = sizeof(ETHERNETII_FRAME);
                }

                // update payload and state
                if(!pIpStack->fFrameIsParsed)
                {
                    pIpStack->pPayload  += pIpStack->cbFrame;
                    pIpStack->cbPayload -= pIpStack->cbFrame;
                }

                // go to the next state
                state = pIpStack->etherType;
                break;

            case ethertypeIPv4:

                // if parsed, just get our size
                if(pIpStack->fFrameIsParsed)
                {
                    cbT = pIpStack->cbIPHeader;
                }

                // if not parsed, what we are parsing is in the payload pointer
                else
                {
                    pIpStack->pIPv4Hdr  = (IPv4HDR *) pIpStack->pPayload;
                    cbT = pIpStack->cbPayload;
                }

                if(cbT < sizeof(IPv4HDR))
                {
                    state = ipsIpStackParsingError;
                    break;
                }

                // no Endian to worry on this one, it is only a byte long
                pIpStack->cbIPHeader = pIpStack->pIPv4Hdr->cdwHeader * sizeof(uint32_t);

                if(pIpStack->cbIPHeader > cbT)
                {
                    state = ipsIpStackParsingError;
                    break;
                }

                if(!pIpStack->fFrameIsParsed)
                {
                    uint16_t cbTotal = pIpStack->pIPv4Hdr->cbTotal;

                    pIpStack->protocol = pIpStack->pIPv4Hdr->protocol;
                    if(!fInMachineOrder)
                    {
                       ExEndian(&cbTotal, sizeof(uint16_t));
                    }

                    if(cbTotal > pIpStack->cbPayload)
                    {
                        state = ipsIpStackParsingError;
                        break;
                    }

                    pIpStack->pPayload      += pIpStack->cbIPHeader;

                    // this is very important, we must truncate junk at the end of the payload
                    // cbTotal MUST come from what is specified in the header, and cbPayload MUST
                    // represent the value that cbTotal defines (less the IP header as that is part of cbTotal).
                    // this MUST be an "=" calculation NOT a -= cbIPHeader!
                    pIpStack->cbPayload     = cbTotal - pIpStack->cbIPHeader;
                }

                if(fSwitchingOrder)
                {
                    cbT = ExILIPv4Header(pIpStack->pIPv4Hdr, pIpStack->cbIPHeader, fInMachineOrder);

                    // if we are coming from network order
                    // and switching to machine order
                    // and the checksum is not zero, we had a checksum error
                    // that will be the only error that will cause cbT != sizeof(IPv4HDR)
                    if(cbT != sizeof(IPv4HDR))
                    {
                        state = ipsIpStackChecksumError;
                        break;
                    }
                }

                state = pIpStack->protocol;
                break;

            case ippnUDP:
                state = ipsSuccess;

                // parse out the UDP header
                if(!pIpStack->fFrameIsParsed)
                {
                    pIpStack->pUDPHdr  = (UDPHDR *) pIpStack->pPayload;
                    pIpStack->cbTranportHeader = sizeof(UDPHDR);
                    cbT = pIpStack->pUDPHdr->cbHdrData;
                    if(!fInMachineOrder)
                    {
                        ExEndian(&cbT, sizeof(cbT));
                    }

                    if(cbT < pIpStack->cbPayload)
                    {
                        state = ipsIpStackParsingError;
                        break;
                    }
                    pIpStack->pPayload += sizeof(UDPHDR);
                    pIpStack->cbPayload = cbT - sizeof(UDPHDR);
                }

                // put in proper order and calculate the checksum
                if(fSwitchingOrder)
                {
                    state = ExUDPHeader(pIpStack, fInMachineOrder);
                }
                break;

            case ippnTCP:
                state = ipsSuccess;

                // parse out the TCP header
                if(!pIpStack->fFrameIsParsed)
                {
                    pIpStack->pTCPHdr  = (TCPHDR *) pIpStack->pPayload;
                    pIpStack->cbTranportHeader = pIpStack->pTCPHdr->dataOffset * sizeof(uint32_t);

                    if(pIpStack->cbTranportHeader > pIpStack->cbPayload)
                    {
                        state = ipsIpStackParsingError;
                        break;
                    }
                    pIpStack->pPayload += pIpStack->cbTranportHeader;
                    pIpStack->cbPayload -= pIpStack->cbTranportHeader;
                }

                // put in proper order and calculate the checksum
                if(fSwitchingOrder)
                {
                    state = ExTCPHeader(pIpStack, fInMachineOrder);
                }
                break;

            case ippnICMP:
                if(fSwitchingOrder)
                {
                    cbT =  ExICMP(pIpStack->pPayload, pIpStack->cbPayload, fInMachineOrder);
                    if(cbT != pIpStack->cbPayload)
                    {
                        state = ipsIpStackParsingError;
                        break;
                    }

                    // see if we got a checksum error
                    // because this is the payload, do not make it a hard error
                    if(!fInMachineOrder && pIpStack->pICMPHdr->checksum != 0)
                    {
                        pIpStack->ipss = ipssChecksumError;
                    }
                }
                state = ipsSuccess;
                break;

            case ethertypeARP:

                // unfortunately the adaptor may give me a bigger buffer than I think I need.
                if(pIpStack->cbPayload < sizeof(ARPIPv4))
                {
                    state = ipsIpStackParsingError;
                    break;
                }

                etpnT = pIpStack->pARPIPv4->etherType;
                if(!fInMachineOrder)
                {
                    ExEndian(&etpnT, sizeof(etpnT));
                }

                if(etpnT != ethertypeIPv4)
                {
                    state = ipsIpStackNotSupportedPkt;
                    break;
                }

                // get the payload set to the correct size as the adaptor may give us too many bytes with junk at the end
                pIpStack->cbPayload = sizeof(ARPIPv4);
                cbT = sizeof(ARPIPv4);
                if(fSwitchingOrder)
                {
                    cbT = ExARPDatagram(pIpStack->pARPIPv4, pIpStack->cbPayload, fInMachineOrder);
                }

                if(cbT == sizeof(ARPIPv4))
                {
                     state = ipsSuccess;
                }
                else
                {
                   state = ipsIpStackParsingError;
                }
                break;

            case ipsIpStackChecksumError:
                pIpStack->ipss = ipssChecksumError;
                pIpStack->fFrameIsParsed = false;
                return(false);
                break;

            case ipsIpStackParsingError:
                pIpStack->ipss = ipssCorruptPkt;
                pIpStack->fFrameIsParsed = false;
                return(false);
                break;

            case ethertypeIPv6:                 // TODO
            case ipsIpStackNotSupportedPkt:
            default:
                pIpStack->ipss = ipssNotSupported;
                pIpStack->fFrameIsParsed = false;
                return(false);
                break;
        }
    }

    if(fSwitchingOrder)
    {
        pIpStack->headerOrder = ~pIpStack->headerOrder;
    }
    pIpStack->fFrameIsParsed = true;
    return(true);
}

static bool IPSSetFrame(IPSTACK * pIpStack, IPSTATUS * pStatus)
{

    if(pIpStack->cbFrame != sizeof(ETHERNETII_FRAME))
    {
        AssignStatusSafely(pStatus, ipsInvalidFrameSize);
        return(false);
    }

    pIpStack->pFrameII->etherType = pIpStack->etherType;
    pIpStack->fIEEE802Frame     = false;

    // put my MAC address in.
    memcpy(&pIpStack->pFrameII->macSrc, &pIpStack->pLLAdp->pNwAdp->mac, sizeof(MACADDR));

    // put in the broadcast address, this will be filled in at the last min before
    // transmission when we do a ARP lookup for the IP
    memcpy(&pIpStack->pFrameII->macDest, &MACBROADCAST, sizeof(MACADDR));

    AssignStatusSafely(pStatus, ipsSuccess);
    return(true);
}

// does not calculate checksum; this is calculated when we got to network order
static bool IPSSetHeader(IPSTACK * pIpStack, IPSTATUS * pStatus)
{
    if(ILIsIPv6(pIpStack->pLLAdp))
    {
        memset(pIpStack->pIPv6Hdr, 0, sizeof(IPv6HDR));
        AssignStatusSafely(pStatus, ipsIpStackNotSupportedPkt);
        return(false);
    }
    else
    {
        if(pIpStack->cbIPHeader < sizeof(IPv4HDR))
        {
            AssignStatusSafely(pStatus, ipsInvalidIPv4HedearSize);
            return(false);;
        }

        // Per RFC 791
        pIpStack->cbIPHeader            = sizeof(IPv4HDR);
        pIpStack->pIPv4Hdr->version     = 4;
        pIpStack->pIPv4Hdr->cdwHeader   = sizeof(IPv4HDR) / 4;
        pIpStack->pIPv4Hdr->cbTotal     = sizeof(IPv4HDR) + pIpStack->cbTranportHeader + pIpStack->cbPayload;
        pIpStack->pIPv4Hdr->ident       = 0;
        pIpStack->pIPv4Hdr->u16         = 0;
        pIpStack->pIPv4Hdr->timeToLive  = TIME_TO_LIVE;
        pIpStack->pIPv4Hdr->protocol    = pIpStack->protocol;     // typically ippnICMP, ippnTCP, ippnUDP
        pIpStack->pIPv4Hdr->hdrChecksum = 0;            // for calculations, this is set to 0, RFC 791
        pIpStack->pIPv4Hdr->ipSrc.u32   = pIpStack->pLLAdp->ipMy.ipv4.u32;
        pIpStack->pIPv4Hdr->ipDest.u32  = IPv4BROADCAST.u32;

        // TODO: Process options
        pIpStack->fOptionPresent        = false;

        return(true);
    }

    AssignStatusSafely(pStatus, ipsIpStackParsingError);
    return(false);
}

// this fills in all of the headers if you have the pointers set up in the stack.
bool IPSConstructIpStackHeaders(IPSTACK * pIpStack, IPSTATUS * pStatus)
{

    bool fRet       = false;
    IPSTATUS status = ipsSuccess;

    if(IPSIsInUse(pIpStack))
    {
        status = ipsIpStackInUse;
    }

    else if(pIpStack->headerOrder != MACHINE_ORDER)
    {
        status = ipsIpStackNotInMachineOrder;
    }

    // check we have our pointers and sizes
    else if(pIpStack->pTransportHeader != NULL && pIpStack->pIPHeader == NULL)
    {
        status = ipsIPv4HedearRequired;
    }

    else if(pIpStack->pFrameII == NULL)
    {
        status = ipsFrameHeaderRequired;
    }

    else
    {
        fRet = true;
    }

    // make the transport header
    if(fRet && pIpStack->pTransportHeader != NULL)
    {
        switch(pIpStack->protocol)
        {
            case ippnUDP:
                pIpStack->pUDPHdr->cbHdrData       	= sizeof(UDPHDR);
                break;

            case ippnTCP:
                pIpStack->pTCPHdr->dataOffset = sizeof(TCPHDR) / sizeof(uint32_t);
                break;

            default:
                status = ipsUnsupportedTransportProtocol;
                fRet = false;
                break;
        }
    }

    // make the IP header
    if(fRet && pIpStack->pIPHeader != NULL)
    {
        fRet = IPSSetHeader(pIpStack, &status);
    }

    // There is always a frame, make the frame
    if(fRet)
    {
        fRet = IPSSetFrame(pIpStack, &status);
    }

    // put our return codes in
    AssignStatusSafely(pStatus, status);
    if(fRet)
    {
        pIpStack->fFrameIsParsed    = true;
        pIpStack->ipss = ipssNone;
        return(true);
    }
    else
    {
        pIpStack->ipss = ipssCorruptPkt;
        return(false);
    }
}

// this should work for both MACHINE and NETWORK ORDER
IPSTACK *  IPSSwapSrcAndDest(IPSTACK * pIpStack)
{
    if(pIpStack == NULL ||  !pIpStack->fFrameIsParsed)
    {
        return(NULL);
    }

    switch(pIpStack->protocol)
    {
        // it doesn't matter if this is TCP or UDP header,
        // they both start with the src and dest port.
        case ippnTCP:
        case ippnUDP:
            {
            uint16_t portT              = pIpStack->pUDPHdr->portSrc;
            pIpStack->pUDPHdr->portSrc  = pIpStack->pUDPHdr->portDest;
            pIpStack->pUDPHdr->portDest = portT;
            }
            break;

        // there is no trans port header, nothing to do
        case ippnNone:
            break;

        case ippnICMP:
            break;

        default:
            return(NULL);
            break;
    }

    switch(pIpStack->etherType)
    {
        case ethertypeIPv4:
            {
            IPv4    ipv4;

            // something to think about. The RFC we must use the same IP in a transaction
            // If our IP changed, we will be responding with the OLD IP as the RFC says to do
            // however, we will never recieve another packet again because our listening will
            // be on a different IP and a RST will have to be sent.
            // so we need to just switch IPs, not use my current IP if it had changed receiving this.
            ipv4.u32 = pIpStack->pIPv4Hdr->ipSrc.u32;
            pIpStack->pIPv4Hdr->ipSrc.u32 = pIpStack->pIPv4Hdr->ipDest.u32;
            pIpStack->pIPv4Hdr->ipDest.u32 = ipv4.u32;
            }
            break;

        case ethertypeIPv6:
            {
            IPv6    ipv6;

            // same comment as ethertypeIPv4 applies
            memcpy(&ipv6, &pIpStack->pIPv6Hdr->ipSrc, sizeof(IPv6));
            memcpy(&pIpStack->pIPv6Hdr->ipSrc, &pIpStack->pIPv6Hdr->ipDest, sizeof(IPv6));
            memcpy(&pIpStack->pIPv6Hdr->ipDest, &ipv6, sizeof(IPv6));
            }
            break;

        case ethertypeARP:
            // we need to flip the src and dest macs in the ARP packet
            memcpy(&pIpStack->pARPIPv4->macDest, &pIpStack->pARPIPv4->macSrc, sizeof(MACADDR));
            // but we want to make sure we return our mac (get rid of broadcast)
            memcpy(&pIpStack->pARPIPv4->macSrc, &pIpStack->pLLAdp->pNwAdp->mac, sizeof(MACADDR));

            // we need to flip the src and dest IPs in the ARP packet
            memcpy(&pIpStack->pARPIPv4->ipv4Dest, &pIpStack->pARPIPv4->ipv4Src, sizeof(IPv4));
            // lets make sure we always return our IP
            memcpy(&pIpStack->pARPIPv4->ipv4Src, &pIpStack->pLLAdp->ipMy.ipv4, sizeof(IPv4));
            break;

        case ethertypeNone:
            break;

        default:
            return(NULL);
            break;
    }

    // swap the Frame MAC, doesn't matter if 802 header or not as the
    // frame always starts with the Mac addresses
    if(pIpStack->pFrameII != NULL)
    {
            // alwasy make the src my MAC as the dest might have been a boardcast to me.
            memcpy(&pIpStack->pFrameII->macDest, &pIpStack->pFrameII->macSrc, sizeof(MACADDR));
            // always make sure we return our Mac address
            memcpy(&pIpStack->pFrameII->macSrc, &pIpStack->pLLAdp->pNwAdp->mac, sizeof(MACADDR));
    }

    return(pIpStack);
}

bool IPSUpdateARPEntry(IPSTACK * pIpStack)
{
    switch(pIpStack->etherType)
    {
        case ethertypeIPv4:
            return(LLUpdateARPEntry(pIpStack->pLLAdp, &pIpStack->pIPv4Hdr->ipSrc, &pIpStack->pFrameII->macSrc));
            break;

        case ethertypeIPv6:
            return(LLUpdateARPEntry(pIpStack->pLLAdp, &pIpStack->pIPv6Hdr->ipSrc, &pIpStack->pFrameII->macSrc));
            break;

        default:
            break;
    }
    return(false);
}

void IPSPeriodicTasks(void)
{
    static uint32_t fRecursion = false;

    // we want to be able to safely call periodicTasks from anywhere
    // so don't allow recursion.
    if(fRecursion)
    {
        return;
    }
    fRecursion = true;

    SYSPeriodicTasks();
    LLPeriodicTasks();
    ILPeriodicTasks();
    TCPPeriodicTasks();
    DHCPPeriodicTasks();
    DNSPeriodicTasks();
    SNTPPeriodicTasks();

    fRecursion = false;
}

redpajama_set_name: RedPajamaGithub


text:
Volume 130 Issue 60 Previous Issue Next Issue Browse All Issues
MIT plans expansion of University Park
By Margaret Cunniff Dec. 10, 2010
MIT will work with Forest City Boston to build a new building at 298–334 Massachusetts Avenue, in the area just north of Random Hall, expanding research and retail opportunities along the block. Construction could start as soon as a year from now.
CAC, Walker groups to talk
By Stan Gill Dec. 10, 2010
This morning, several design and construction firms will be taking a tour of Walker Memorial to evaluate the building's potential to support MIT's Music and Theater Arts programs. Although Campus Activities Complex Director Phillip J. Walsh has said "no decisions have been made and cannot be adequately addressed until the feasibility and assessment reviews are conducted" in regards to the project, the action of the Facilities department in hiring these architects and contractors comes as an alarm to several student groups housed in Walker.
Docks honor 75th, will double in size
By Leo Zhou Dec. 10, 2010
Changes are coming to the MIT Sailing Pavilion next year for its 75th anniversary: the pavilion will more than double in size, some boats will be gone, and new boats will come. The costliest of these changes is the $1.6 million dock renewal project planned by the MIT Nautical Association (MITNA) for the pavilion.
20 attend dining protest
By Natasha Plotkin Dec. 10, 2010
For the first week in what seems like all semester, few public words have been spoken about dining. No new petitions have been sent out, no Undergraduate Association resolutions have been passed, and no new tweaks to the plan have been made. It's been a week since the last dining protest. Perhaps students have finally accepted the administration's word that it is committed to moving ahead with the most recent version of the plan, perhaps they're even mostly satisfied with it, or maybe they're just busy studying for finals.
Anna Tang acquitted in stabbing
By John A. Hawkinson Dec. 10, 2010
Anna L. Tang was deemed not criminally responsible for the attempted murder of Wolfe B. Styke.
The Cheney Room: MIT's hidden gem
By Maggie Lloyd Dec. 10, 2010
On any given day, the Margaret Cheney Room, a lounge designated exclusively for female students at MIT, is peacefully quiet. In this hidden campus gem, flyers are plastered on the walls, with topics ranging from UROPs to body image. Posters proclaim Martha Stewart-esque guidelines: "Exercise every day." "Learn to Prioritize." "Avoid people who are complainers or who stress you out." "Relax." Beds, puzzles, a piano, showers — the room has everything for the exhausted female student to relax.
Taking a new legal direction: Genes are not patentable
By Jingyun Fan Dec. 10, 2010
The legality of patents on genes is in jeopardy after a judge ruled that genes were ineligible for patents because they involved "laws of nature." Twenty percent of the human genome is currently patented.
Electronic RFPs so far a success
The Student Activities Finance Office reports that their new electronic system of student group reimbursements is working well, and they are not backlogged at the end of term for the first time in several years.
'Control group' in NYC homeless study denied aid
By Cara Buckley Dec. 10, 2010
NEW YORK — It has long been the standard practice in medical testing: Give drug treatment to one group while another, the control group, goes without.
Authored by Group Dec. 10, 2010
An article on published on Tuesday, December 7, about the 2.009 final presentations incorrectly stated the projected cost of the Blue Team's egg washer was $100,000 per unit. Their initial legal and patent costs are expected to be $100,000, but their projected production costs are between $600 and $1,000 per unit.
Drug-trafficking cop, Joe D'Amelio trial set for March
Former MIT Campus Police officer Joseph D'Amelio, arrested for drug trafficking in March 2009, remains at liberty after posting bail. His trial is scheduled for March 22, 2011, though these dates routinely slip.
Gaggle cops 131st Tech Managing Board elections
By Wild Turkey Dec. 10, 2010
Harvard Corp. to nearly double size
On Monday, Harvard announced a doubling of the size of its board of directors, "the President and Fellows of Harvard College", from seven to thirteen.
World and Nation
September 11 rescue worker health bill blocked by Senate this week
By Raymond Hernandez Dec. 10, 2010
WASHINGTON — Republican senators blocked Democratic legislation on Thursday that sought to provide medical care to rescue workers and others who became ill as a result of breathing in toxic fumes, dust and smoke at the site of the 9/11 World Trade Center attack.
Senate stalls bill to repeal gay exclusion policy in military
By Jennifer Steinhauer Dec. 10, 2010
WASHINGTON — In a blaze of unusual bipartisan fury, a military policy bill that would repeal the ban on gay and lesbian soldiers serving openly in the military stalled in the Senate on Thursday, severely diminishing the chances of ending the Clinton-era policy this year.
Shorts (left)
By —Vikas Bajaj, The New York Times —The New York Times —Michael Cooper, and The New York Times Dec. 10, 2010
MUMBAI, India — When it was introduced in early 2009, the egg-shaped Tata Nano was billed as a modern-day people's car, an ultracheap vehicle that would bring greater mobility to the masses of India and, eventually, the world. But those ambitions have stalled — for now, at least.
Shorts (right)
By —Peter Baker, The New York Times —Ken Belson, The New York Times —John F. Burns and Ravi Somaiya, The New York Times —Stephanie Clifford, The New York Times Dec. 10, 2010
WASHINGTON — While President Barack Obama presses the Senate to embrace a new arms control treaty with Russia, another nuclear pact with Moscow cleared its final hurdle on Thursday after more than four years with virtually no notice but potentially significant impact.
UK student protesters attack car carrying Prince Charles
By John F. Burns Dec. 10, 2010
LONDON — Britain's coalition government survived the most serious challenge yet to its austerity plans on Thursday when Parliament narrowly approved a sharp increase in college fees. But violent student protests in central London, including an attack on a car carrying Prince Charles and his wife Camilla to the theater, provided a stark measure of growing public resistance.
Sports stars seek profit from catchphrases, nicknames, epithets
By Katie Thomas Dec. 10, 2010
Jets cornerback Darrelle Revis shut down so many receivers last season that teammates started calling his turf Revis Island, where opposing players were inevitably marooned.
Weekend weather warmer, wetter
By Vince Agard Dec. 10, 2010
A proverbial grab bag of weather will be on display this weekend, with clouds, sunshine, rain, and possibly even snow all on tap. First, clearing skies and calm winds will result in some of the coldest air of the autumn this morning, with temperatures plunging into the mid-teens. However, as a high pressure center drifts offshore, southerly flow will advect warm air to our area, and temperatures will increase steadily throughout the day and overnight, bringing Saturday's high to the mid-40s.
China moves to block foreign broadcasts on Nobel prize
By David Barboza Dec. 10, 2010
SHANGHAI — Chinese censors apparently began blocking the news websites of CNN, the BBC and the Norwegian broadcaster NRK from appearing in China on Thursday, a day before the Nobel Peace Prize ceremony is to be held in Oslo, Norway, to honor Liu Xiaobo, the imprisoned dissident.
Illegal immigrants who drive risk more than a ticket
By Julia Preston
and Robert Gebeloff Dec. 10, 2010
LAWRENCEVILLE, Ga. — It was just another suburban fender-bender. A car zoomed into an intersection and braked too late to stop at a red light.
Add India to a revamped Security Council
By Keith Yost Dec. 10, 2010
On Nov. 8, on the final day of his visit to India, President Obama gave an address to a joint session of the Indian parliament that included this gem: "In the years ahead, I look forward to a reformed United Nations Security Council that includes India as a permanent member."
We were incredibly excited to read in The Tech a few weeks ago that MIT is planning to create an official plan for undergraduate computational biology education. Having graduated from MIT last spring and spent three years in UROPs (with one of us continuing as an MEng) in the Berger Computation and Biology Group, we appreciate the need for increased guidance for undergraduates who are interested in computational biology. When we first came to MIT, we remember many people wondering why we, as math and computer science majors, were taking biology classes and attending biology-related talks. We often felt unsure of which classes to take and how to best prepare ourselves for careers in interdisciplinary research, and without the guidance that we were fortunate to receive from faculty and graduate students, we may not have found our way. The enthusiasm that both Professor Grimson and Professor Kaiser expressed about guiding undergraduates interested in computational biology was wonderful to hear.
Wise up about Wikileaks
By Samuel Markson Dec. 10, 2010
Secretary of State Hillary Clinton has called the latest Wikileaks/Bradley Manning revelations "very irresponsible, thoughtless acts that put at risk the lives of innocent people all over the world." Mike Huckabee stated that anything less than execution is too kind a penalty. Sarah Palin said of Julian Assange, the front-man of the Wikileaks ensemble, "He is an anti-American operative with blood on his hands ... Why was he not pursued with the same urgency we pursue al-Qaeda and Taliban leaders?"
Being liberal doesn't work — to remain relevant, Democrats must revise their agenda
There's an interesting fairy tale that Democrats (and Mr. Veldman) have been telling themselves for more than a decade. "If we were simply better at getting out our message, we'd win more elections." This is an incredibly facile analysis — it is akin to saying that the U.S. Army would win more wars if its soldiers shot more enemies and got shot less themselves. Even if it had the power to explain why Democrats win in some years and lose in others (which it doesn't), it's less than worthless as a form of strategic advice. The "voters are stupid, why else wouldn't they vote for us" meme has been rampant on the left for quite some time — if it really had insights to offer, surely these lessons would have been capitalized upon by now.
UA Update and Answers
At last week's Exec meeting, there was a short discussion on dining at Simmons, but not many residents showed up to express their opinions. It transitioned into a discussion on FinBoard reforms. Changes have been made to split the Spring allocation period into two periods, and there was further discussion on changes to policy and funding, as well as the creation of a committee to revise FinBoard policies over IAP.
Who is out of touch, you say? Republicans regularly and unashamedly disregard the wishes of the American people
By Mike Veldman Dec. 10, 2010
Penn Jillette once observed that the Republican Party was essentially the "party of fear" and the Democratic Party the "party of hate." During the Bush era (when he made the remarks) these designations hit the nail on the head. Republicans used the awful specters of Islamic terrorism, the Radical Gay Agenda, abortion and — gasp! — taxes to bully voters into thinking there was only one way they would make it through the next decade with their churches, families, money, or guns safe. Democrats, conversely, used George Bush as a symbol for everything that was wrong with Republicans. He, and by extension the Republican Party, wasn't just incompetent, he was greedy and racist and ever eager to encroach on our rights — he took from the poor to give to the rich, he turned a cold shoulder to the victims of Katrina, and he routinely disregarded the constraints of the Constitution.
The undergraduate entrepreneurial ecosystem at MIT
By Ariadne G. Smith Dec. 10, 2010
Entrepreneurship is one of those things that belongs to our generation. Our lives are continually defined by companies that have been started by entrepreneurs our age. Entrepreneurship is something that we all want to try.
EXHIBIT REVIEW Fresh Ink: Ten takes on Chinese tradition
By Kathryn Dere Dec. 10, 2010
Settled in a gallery that's not quite part of the new Art of the Americas wing and not quite part of the old MFA, Fresh Ink is surprisingly quite at home. In this newest project, ten contemporary Chinese artists responded to pieces in the Museum's collection with works of their own, adeptly treading the boundaries of the traditional and the modern, bringing the past and present closer together.
Fencing dominates Ivies Engineers bout Brown, Yale, Cornell at invite
By Craig Kaufman Dec. 10, 2010
The MIT men's and women's fencing teams competed at the Brandeis Invitational last weekend. The women went 4-1, and now have nine match wins on the season, while the men went 1-4 to get their fourth match win.
Basketball keeps up their winning streak Engineers now 7-1 for the season
By Alex Samson Dec. 10, 2010
The MIT men's basketball squad, ranked 21st in the nation (out of over 400 teams), extended their winning streak to six games with a 92-68 win over UMass-Boston Tuesday night in Rockwell Cage.
Upcoming Home Events
Friday, December 10 Women's basketball vs. Wellesley College 7 p.m., Rockwell Cage Saturday, December 11 Squash vs. Amherst College 4 p.m., Z-Center Courts Sunday, December 12 Squash — Alumni Match TBD, Z-Center Courts
MIT plans to develop its real estate at 298-334 Mass Ave. A five-story, 240,000 square foot facility will replace buildings just north of Random Hall.
Image: Google; Illustration: Joanna Kao, John A. Hawkinson
An artist's rendition of Kendall Square, looking east towards Boston, in the springtime after development. The plans are not definite and are certain to change in the future.
Source: MIT Investment Management Company
An artist's rendition of what Kendall could look like in the wintertime. A large screen might exist in the background and there might be dances. Or not — these are preliminary conceptions, and are certain to change.
A view of the Kendall Inbound T stop as it exists today. There is little connection to the rest of campus, and visitors come out of the stop and say, "Where's MIT?"
The numbered buildings on the map indicate areas that could be developed as part of MIT's plan to revitalize Kendall Square within the next five to twelve years.
A present-day view of Kendall Square looking down Main Street towards Boston. MIT recognizes that the retail space in Kendall Square today doesn't engage passers-by.
What To Drive Out? artist response by Liu Xiaodong.
MFA publicity
Joseph D'Amelio is scheduled to go on trial on March 22, 2011. D'Amelio was charged after receiving a package containing hundreds of prescription painkillers at an auto shop in East Boston on Saturday, March 13, 2009.
BOOKING PHOTO
Major improvements are planned for the MIT Sailing Pavilion, located on the Charles River across from Walker Memorial.
Source: Department of Facilities
Spring Romance artist response by Yu Hong.
Members of the Asian Dance Team rehearse a traditional dance for their upcoming performance. The show will take place on Saturday at 6 p.m. in Kresge auditorium.
David Chen—The Tech
Nicholas A. Davis '14 goes for the lay-up against two UMass-Boston defenders on Tuesday night. MIT won 92-68, improving its record to 7-1.
Minh Phan—The Tech
Annie Y. Kwon '11, Alvin S. Chen '11, and Jessie S. Jeon G perform a set of pieces by Felix Mendelssohn as part of the MIT Chamber Music Society on Wednesday night.
Materials Science Professor Donald R. Sadoway removes the foil on a bottle of Champagne Wednesday in his final lecture for 3.091, the solid-state chemistry GIR class he has taught for 16 years. Following a lecture on ...
Sam Range—The Tech
Anna L. Tang was found not guilty by reason of insanity by Middlesex Superior Court judge Bruce R. Henry. The judge ordered her to undergo a psychiatric evaluation.
John A. Hawkinson—The Tech
Mysterious hackers managed to hang a very large cheese in 10-250 on Thursday morning, just in time for the final session of 18.02. The cheese is a reference to the fact that the class always says "cheese!" when Profes...

redpajama_set_name: RedPajamaCommonCrawl


text:
2022 actor black women celebrity families celebrity marriage celebrity news culture gossip media news podcast trending news
Megan Markle & Mariah Carey Speak On Growing Up As Biracial Girls Into Women And Feeling As If Society Pushes You To Choose Between The Two!
No Comments on Megan Markle & Mariah Carey Speak On Growing Up As Biracial Girls Into Women And Feeling As If Society Pushes You To Choose Between The Two!
-Tamara'Shanay-
In the newly released episode of Meghan Markle's Spotfiy podcast 'Archetypes' she sat down one on one with music icon Mariah Carey!
Amongst the different topics discussed the ladies spoke freely about growing up in society as bi-racial girls grown into women. Both Meghan and Mariah also reflected on some of the difficulties they faced with being forced to identify to one specific race while also trying to fit in as a kid, reports PEOPLE.
"I didn't fit in. I didn't fit in. You know, it would be more of the Black area of town or then you could be where my mom chose to live, were the more, the white neighborhoods. And I didn't fit in anywhere at all," said Mariah explaining how she moved around a lot as a kid.
" Yeah, I understand that," responded Meghan. "You were so formative for me. Representation matters so much," Meghan explained as she let Mariah know that she was interested in having her appear on her podcast for more than just idolization of her music. "But when you are a woman and you don't see a woman who looks like you somewhere in a position of power or influence, or even just on the screen — because we know how influential media is — you came onto the scene, I was like 'Oh, my gosh. Someone kind of looks like me. ' "
Meghan continued, "I had read this article about Halle Berry, and they were asking her how she felt being treated as a mixed-race woman in the world. And her response was her saying, 'Well, your experience through the world is how people view you." So she said because she was darker in color, she was being treated as a Black woman, not as a mixed woman."
"And I think for us, it's very different because we're light-skinned," she said. "You're not treated as a Black woman. You're not treated as a white woman. You sort of fit in between.
"I mean, if there's any time in my life that it's been more focused on my race, it's only once I started dating my husband. Then I started to understand what it was like to be treated like a Black woman," Meghan stated. "Because up until then, I had been treated like a mixed woman. And things really shifted."
Mariah reflected on society admittedly forcing people of mixed race to choose one. "As mixed woman, because I always thought it should be okay to say I'm mixed. Like it should be okay to say that. But people want you to choose,"stated Mariah.
Cousins, what are your thoughts on the topic?
Tags bi racial, mariah carey, meghan markle, prince harry
← Tabitha Brown Issues Message Of Staying True To Herself Following News That The Food Network Bumped Her Show From Their Primetime Lineup! → Stop The Violence: Video Footage Surfaces Of A Woman Being Knocked Unconscious By A Male During Chris Brown Concert!


text:
White-crowned Snake - profile
Scientific name: Cacophis harriettae
Profile last updated: 12 Feb 2018
The White-crowned Snake is a small, slim snake up to 45 cm long. Its upper body is dark steely-grey to dark grey-brown and the belly is lighter grey. The black crown is encircled by a creamy-white band that is widest on the nape, extending around the sides of the head to enclose the snout. It is mainly nocturnal and reacts to disturbance by raising its head and upper body off the ground and making striking movements, but seldom attempts to bite.
Coastal and near-coastal areas from central eastern Queensland south to the vicinity of Coffs Harbour in north-east NSW. The western limit is the Legume area near the NSW-Queensland border; however, their stronghold appears to be the middle Clarence Valley.
Favours low to mid-elevation dry eucalypt forest and woodland, particularly areas with a varied and well-developed litter layer, where their prey of small lizards may be more abundant.
Also occasionally found in moist eucalypt forest and coastal heathland.
Clearing, fragmentation and isolation of suitable habitat due to agricultural and intensive forestry activities.
Loss of foraging and sheltering habitat as the result of frequent burning associated with grazing and forest management.
Collection of firewood, bush rock and mulch from areas of habitat.
Use alternative methods to protect property from fire.
Allow forest and woodland litter layers to develop by reducing the incidence of fire.
Do not collect fallen timber for firewood or bush rock for gardens from bushland areas.
Protect known and potential habitat from clearing, fragmentation and isolation.
Reconnect areas of known and potential habitat with wide forested corridors.
Report any confirmed records from outside the known distribution to OEH
Cogger. H.G. (2014) Reptiles and Amphibians of Australia. 7th Edition. (CSIRO Publishing, Collingwood.)
Department of Environment, Climate Change and Water NSW (2010) Northern Rivers Regional Biodiversity Management Plan.
NSW National Parks and Wildlife Service (2002) Threatened Species of the Upper North Coast of NSW: Fauna. (NSW NPWS, Coffs Harbour)
Swan, G., Shea, G. and Sadlier, R. (2004) A Field Guide to Reptiles of New South Wales. (Reed New Holland, Sydney)
Wilson, S. and Swan, G. (2003) A Complete Guide to Reptiles of Australia. (Reed New Holland, Sydney)
NSW North Coast Cataract Predicted None
NSW North Coast Coffs Coast and Escarpment Known North of Coffs Harbour
South Eastern Queensland Woodenbong Predicted None
White-crowned Snake
Northern Rivers Regional Biodiversity Management Plan ( PDF - 2.94MB)


text:
Kickstarter has become a breeding ground for small, independent watch brands to flourish, and while the platform inherently has its issues, there's no denying that some great products have emerged from the crowdfunding platform. Marnaut, a watch brand based in Croatia, has just started a campaign to fund its first timepiece, an accessibly-priced mechanical diver that looks to be promising.
Called the Dark Surge 300, the watch has a lot of features you'd expect to see in a well-rounded diver, including a 300-meter depth rating, a 120-click unidirectional bezel with an aluminum insert and lots of Super Luminova. What helps the Dark Surge stand out in a sea of similarly-styled dive watches, though, are additional lume plots that segment the dial at every hour; this is an aesthetic choice that is, according to the brand, inspired by the skeletal structure of a sea urchin. Inside the watch ticks away a Miyota 9015 automatic movement.
The watch is available either with Black PVD coating or in plain stainless steel at a pre-order starting price of $449, a $170 discount from the watch's full starting price once it's fully funded.
Posted in: Gear Tagged: Watches
In Praise of the One-Watch Collection
This Is the Premium Timex Watch We've Been Waiting For
Barton's Watch Roll Is Sleek, Stylish and Ready to Go Wherever You Do


text:
Employees of Road Engineering Co. Sue for Unpaid Overtime
Posted by: bschaffer
This Law360 article discusses our firm's proposed class action lawsuit against Gorman Group, LLC, a road engineering company, for unpaid overtime wages. Gorman Group has allegedly failed to pay its employees for travel time, which often was up two hours daily, that went unaccounted for when calculating their overtime pay. sexual harassment lawsuit of a Pure Yoga attendee that was accosted by her instructor. The lawsuit is looking to recover unpaid overtime wages, unlawful deductions of wages, liquidated damages, pre- and ...
Pure Yoga Sued for Sexual Harassment
This NY Post article highlights our firm's sexual harassment lawsuit of a Pure Yoga attendee that was accosted by her instructor. Pure Yoga, owned and operated by Equinox, has two locations in New York City. The plaintiff in this matter was a long time member of Pure Yoga. The lawsuit is looking to recover punitive damages, attorneys' fees and costs, and other legal and equitable relief from Equinox and the instructor.
Day Rate Workers for EnSite Sue for Unpaid Overtime
A recent news article posted by Texas Record highlights the class action lawsuit brought against Ensite USA by day rate employees represented by our firm alongside with Bruckner Burch PLLC. This project management company based out of Houston, Texas allegedly did not pay its day rate workers the appropriate wages. The lawsuit seeks to recover unpaid overtime, liquidated damages and attorneys' fees and costs.
Ensite required its non-exempt day rate employees to work well over 40 hours per week without paying ...
Beatrice Inn Faces Unpaid Wages Lawsuit
Fitapelli & Schaffer, LLP has filed a class action wage lawsuit against the Beatrice Inn restaurant, a high end West Village chop house known for its extravagant steak options. According to the lawsuit, Butcher's Block Hospitality, LLC and Angela Mar, owners of the Beatrice Inn restaurant failed to pay its tipped workers overtime compensation, minimum wages, misappropriated tips, and other damages. Employees that would be affected by the lawsuit include tipped workers such as bartenders, barbacks, captains, and others in ...
F&S Partner Brian Schaffer Interviewed Regarding Top Cases to Watch for In 2018
Law360's recent article delves into some of New York's highest profile cases that hope to have significant action in the courtroom this year or see some sort of resolution in 2018. The cases to watch include allegations of presidential sexual misconduct, women lawyers' equal-pay claims, the sentencing of former pharmaceutical executive Martin Shkreli, and former banker Jennifer Sharkey' s ongoing fight against JPMorgan Chase & Co.
Brian Schaffer, partner of Fitapelli & Schaffer, LLP, was interviewed for his take on a ...
Settlement for F&S's $19.1M Wage Deal is Preliminarily Approved by Federal Judge
Fitapelli & Schaffer is pleased to announce the preliminary approval of a revised $19.1 million settlement against TGI Friday's Inc. by a class of 28,000 tipped employees. A settlement that was originally denied by the Judge resurfaced after specific provisions were removed.
The settlement was initially denied due to the vagueness of the class action's confidentiality provisions, waivers, and releases. TGI Friday's allegedly violated the Fair Labor Standards Act, along with the laws of nine states, which the federal judge now ...
F&S Sues Celeb Lawyer and Restaurateur TV Personality in Sex Discrimination and Retaliation Lawsuit
Fitapelli & Schaffer, LLP has filed a lawsuit for sexual harassment and retaliation against Prova Pizzabar co-owned by the former judge of "Iron Chef America", Donatella Arpaia, and celebrity lawyer, Mark Geragos. The pair is being accused of not properly managing sexual harassment complaints at their Grand Central Terminal pizzeria, terminating the employee who was accosted, and retaliating against her. The former employee claims she was subject to constant sexual harassment at the hands of her co-worker ...
Chipotle Apprentices Class Action Overtime Case to Get a Second Look
An unpaid overtime lawsuit against Chipotle that was initially filed by Fitapelli & Schaffer, LLP and two other labor law firms in November 2012 had been seemingly stopped in its tracks in March of this year. The lawsuit had accused the fast food Mexican chain of wrongfully denying its apprentices overtime and that they had misclassified them as managerial workers. A judge ruled that the lawsuit could not be brought as a class since Chipotle stores in different areas operated ...
TGI Friday's Wage Action Settles for $19.1M
Our firm is proud to announce a record breaking settlement amount of $19.1 million for almost 29,000 TGI Friday's tipped workers. This result was reached in order to resolve several claims alleging federal and state wage violations. TGI Friday's, the restaurant chain with an international presence, ultimately agreed to settle in order to eliminate the risk, cost, and delay of years of further litigation. The lawsuit affected TGI Friday's tipped workers in the following nine states: New York, New Jersey, ...
Fitapelli & Schaffer Featured in NY Super Lawyers 7 Years in a Row
Fitapelli & Schaffer, LLP, through its commitment and perseverance in helping recover tens of millions of dollars for its hard working clients, has once again been named to Super Lawyers. The firm focuses exclusively on employee rights and has achieved substantial results in cases relating to unpaid wages, overtime pay, tips and commissions, as well as
discrimination, wrongful termination and whistleblower matters. Click below to read more about the firms success.
Page 1 of 7 12345...»


text:
Home, News
New album Iron Savior is complete
German power metallers Iron Savior have been preparing a new album which they now revealed will be entitled Rise Of The Hero and will be out on February 28th, 2014 through AFM Records. The album is now complete and the band promises to release some previews soon.
Hail to the new Within Temptation video
Gamma Ray's new album 'Empire Of The Undead' to release March
KRISIUN launch new video for "Blood Of Lions"
BLACKNING FINISH WRITING NEW ALBUM


text:
package fr.adrienbrault.idea.symfony2plugin.doctrine.querybuilder;

import com.intellij.openapi.project.Project;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import fr.adrienbrault.idea.symfony2plugin.doctrine.querybuilder.dict.QueryBuilderJoin;
import fr.adrienbrault.idea.symfony2plugin.doctrine.querybuilder.dict.QueryBuilderRelation;
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
import org.apache.commons.lang.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

class QueryBuilderRelationClassResolver {

    final private Project project;
    final private Map<String, String> joins = new HashMap<String, String>();
    final private Map<String, List<QueryBuilderRelation>> relationMap;
    final private Map<String, QueryBuilderJoin> joinMap = new HashMap<String, QueryBuilderJoin>();

    public QueryBuilderRelationClassResolver(Project project, String aliasRoot, String aliasClass, Map<String, List<QueryBuilderRelation>> relationMap, Map<String, QueryBuilderJoin> joinMap) {
        this.project = project;
        this.joins.put(aliasRoot, aliasClass);
        this.relationMap = relationMap;
        this.joinMap.putAll(joinMap);
    }

    public void collect() {

        for(QueryBuilderJoin queryBuilderJoin: joinMap.values()) {
            if(queryBuilderJoin.getResolvedClass() == null) {
                String joinName = queryBuilderJoin.getJoin();
                String[] split = StringUtils.split(joinName, ".");
                if(split.length == 2) {

                    // alias.foreignProperty
                    String foreignJoinAlias = split[0];
                    String foreignJoinField = split[1];

                    if(relationMap.containsKey(foreignJoinAlias)) {
                        for(QueryBuilderRelation queryBuilderRelation: relationMap.get(foreignJoinAlias)) {
                            if(queryBuilderRelation.getFieldName().equals(foreignJoinField)) {
                                String targetEntity = queryBuilderRelation.getTargetEntity();
                                if(targetEntity != null) {
                                    PhpClass phpClass = PhpElementsUtil.getClassInterface(project, targetEntity);
                                    if(phpClass != null) {
                                        relationMap.put(queryBuilderJoin.getAlias(), QueryBuilderMethodReferenceParser.attachRelationFields(phpClass));
                                        queryBuilderJoin.setResolvedClass(targetEntity);
                                        collect();
                                    }
                                }

                            }
                        }

                    }

                }

            }
        }

    }

}


Dr. Bob Scheffer is a Principal Consultant with Petrogenium, a downstream and petrochemical consultancy company based in the Netherlands.
He acquired his expertise in residue processing, hydrocracking and catalyst technology during his 30+ year international career in Shell dealing with technology and catalyst development from conceptual level, design, start-up through to operational aspects and trouble-shooting. Dr. Scheffer's is a recognized international expert and co-editor of the book "Catalyst Deactivation", speaker at major conferences (ACS, ERTC, BBTC, IDECAT etc.), guest lecturer at Delft University of Technology in the Netherlands and member of the Board of the Netherlands Catalysis Society.


Bangkok, Thailand, May 30, 2018 - Kimberly Hill and Lauren Gibbemeyer celebrated their returns to the starting lineup as the United States continued their hot streak in the women's FIVB Volleyball Nations League with a 3-0 (25-20, 25-23, 25-21) victory against the Dominican Republic on Wednesday.
Hill and Gibbemeyer both missed Tuesday's straight-sets win over Germany but capped their comebacks with a combined 27 points, with Hill finishing with 16 and Gibbemeyer racking up 11.
Michelle Bartsch-Hackley was once again the US team's top scorer. She compiled 19 points to take her total for the tournament to 106, the most by any player on the American roster, as the reigning world champions posted their sixth consecutive 3-0 win in the competition.
Brayelin Martinez led the Dominican Republic with 19 points, including a game-high 17 kills from 36 attempts, taking her total of spikes for the VNL to 103 and her overall points total to 120.
Wing spiker Yonkaira Pena also troubled the Americans throughout the contest and picked up 13 points along the way while Lisvel Eve and Dominican captain Niverka Marte got seven each.
The Dominican Republic beat the Pool 11 hosts Thailand 3-0 on Tuesday but Wednesday's defeat left them at 2-6 for the tournament while the US have been unstoppable since losing their second match at home against Turkey, winning 18 sets in a row.
With Martinez's heavy hitting and Marte's never-say-die attitude, the Dominican Republic provided the Americans with a real challenge, leading late in the second and third sets, but the tournament leaders found a way each time to win.
Hill dominated early on and managed 16 kills from just 26 attempts while Gibbemeyer was even more efficient, hitting 9 from 11, as the US improved to 7-1 for the tournament.
Bartsch-Hackley took over in the final two sets, adding a block and four service winners to her 14 spikes from 33 swings, while Kelly Murphy became the fourth American to reach double figures when she closed with 10.
The US have now won their last 13 matches against Dominican Republic since 2006.
The US play Thailand in their final Pool 11 match on Thursday while the Dominican Republic tackle Germany.


The Hibernian soccer team, champions of the state, and the only team picked to play the Pilgrims, champions of England who are now touring this country, are scheduled to play the Bethlehem soccer team next Saturday at Philadelphia. The locals will leave on the 12:45 o'clock Philadelphia & Reading train for the Quaker City. The absence of Capt. Lewis, outside right, who will be away on a business trip, will handicap the team considerably. Albert Lewis will play in his stead. Mgr. Trend has signed Carpenter, Reading's crack goal keeper and he will appear for the first time in Saturday's contest. The lineup of the Bethlehem team follows: Goal, H. Carpenter; left fullback, W. McKinnon; right fullback, Rowland; left halfback, A. Rowland; center halfback, A. Muirhead; right halfback, S. Gilbert; outside right, A. Lewis; inside right, H. Williams; center forward, H. Trend; inside left, M. McKinnon; outside left, M. Leonard.


text:
Patrono delle arti e mecenate di diversi artisti e progettista di giardini egli stesso.

Biografia
Harcourt era figlio di Simon Harcourt, I conte Harcourt, il quale morì nel 1777, e di sua moglie Rebecca. Trascorse due anni della sua giovinezza alla Westminster School, dove frequentò le lezioni di storia dell'arte di Alexander Cozens e di altri maestri dell'epoca.

Nel 1754 Harcourt si portò in Germania ed in Italia al seguito di George Bussy Villiers, e William Whitehead come tutore di Villiers. Il suo Grand Tour continuò sino a tutto il 1756. Whitehead scrisse poi delle poesie sulle residenze familiari di Middleton Park  e Nuneham Courtenay.

Harcourt venne eletto al parlamento per la costituente di St Abans nel 1761, rimanendone membro sino al 1767, non tenendo comunque alcun discorso né intervento alla Camera. Fu tra i sostenitori di John Wilkes, un amico di Catherine Macaulay, ed oppositore della guerra contro le colonie americane, dopo che fu entrato nel 1777 alla Camera dei Lords.

Nel 1772 Harcourt iniziò a disegnare i giardini di Nuneham Courtenay, assistito da William Mason, terminando i lavori nel 1777. Dal 1779 Capability Brown intervenne sul parco e sui giardini; assieme a Paul Sandby. Come patrono delle arti Harcourt impiegò Thomas Pitt per il monumento funebre di suo padre, e creò un premio di poesia in antico bretone, vinto da George Richards.

Matrimonio e figli
Harcourt sposò Elizabeth, figlia di George Venables-Vernon, I barone Vernon, sua cugina, nel 1765.

Note

Altri progetti

redpajama_set_name: RedPajamaWikipedia


text:
Country Explorer
Biggest Fans
Canada Geography and Climate
Canada is located in North America and is considered a multicultural country. The culture has been influenced by the indigenous culture of indigenous peoples as well as by the British and French. There are still Indians in Canada and they continue to influence the Canadian identity with their music and art. In the country, both English and French are official languages and in 2014 a population of around 34.5 million was measured. At the same time, Canada is the world's second largest country, after Russia, on the surface, and thus it can be said that it is a very sparsely populated country. Canada borders the Pacific Ocean, the Atlantic Ocean and the United States. Via the sea, you also have a border with Greenland in the northeast. In northern Canada you almost reach the North Pole and this part of the country is part of the Arctic.
Canada is a federation with three territories and ten provinces and it functions as a parliamentary democracy with the Queen of England as head of state. However, the English monarch has a representative in Canada in the form of the country's governor general. The capital is Ottawa and is located in Ontario. The country was colonized by Britain and France before it became a British dominion. Today, English is the dominant language in Ontario, Newfoundland, Nova Scotia, Prince Edward Island, Saskatchewan, Alberta, British Columbia, Manitoba, the Yukon and Northwest Territories, while French is the main language in Quebec and New Brunswick, Ontario and Manitoba.
Geography and climate
Canada occupies the vast majority of North America. The country has the world's longest coastline, and the land border with the United States is also considered the world's longest land border. Canada has eight different forest regions and more than 30,000 lakes that supply the country with fresh water. There are also glaciers in Canada's Rocky Mountains that also serve as an important source of freshwater. The country is geologically active with many earthquakes and volcanoes that could become active.
According to BRIDGAT.COM, the temperatures in the country vary from region to region. Many parts of the country offer tough winters. Especially in the regions where you have a continental climate and daily temperatures can be at an average of −15 ° C and where you can reach temperatures as low as −40 ° C. In inland regions, the snow can lie on the ground during half of the year and there are also areas where you have snow all year round. The British Columbia coastal area has a temperate climate with mild and rainy winters.
Canada has large natural resources in the form of fossil fuels, hydropower and nuclear energy, and the country has a high standard of living. The good economy is dependent on natural resources and also on trade with the United States. The country's central bank is called the Bank of Canada and issues the country's currency called the Canadian dollar. Since the early 20th century, Canada has developed into an industrial nation. Since the Second World War, economic integration with the United States has increased significantly and through various agreements, trade between the countries has been made easier. The global financial crisis in 2008 led to increased unemployment in Canada, but since 2013, the country's economy has stabilized and trade has begun with Asia as an attempt to spread exports.
Bridges in Louisiana
Diving and Skiing in United States
State Route 24, 25 and 26 in Texas
Copyright Country Explorer 2021


An EEA Family Permit is a document issued to non-EEA nationals living outside the European Union who would like to travel to the UK with an EEA national family member or join an EEA national family member in the UK.
An EEA Registration Certificate is a document issued to EEA nationals who are exercising Treaty rights in the United Kingdom and wish to prove their right of residence. Similarly, the EEA family members of persons exercising Treaty rights may wish to apply for an EEA Registration Certificate.
An EEA Document Certifying Permanent Residence is a residence document issued to EEA nationals who have lived in the UK and exercised Treaty rights for a continuous period of 5 years or more. An EEA Document Certifying Permanent Residence confirms a right of permanent residence in the UK.
An EEA Residence Card is a residence document issued to non-EEA national family members and extended family members of EEA nationals who are exercising Treaty rights in the United Kingdom. An EEA Residence Card confirms a right of residence in the UK.
An EEA Permanent Residence Card is issued to non-EEA national family members and extended family members of EEA nationals who have exercised Treaty rights in the United Kingdom for a continuous period of 5 years. An EEA Permanent Residence Card confirms a right of permanent residence in the UK.
An EEA Derivative Residence Card is a document issued to non-EEA nationals on a variety of bases showing that a right of residence is derived from EU law.


LI Who 2 – Our Doctor Who Convention Review!
This past weekend was the LI Who 2 in Long Island. What's LI Who 2? (#LIwho2) Well my friend, it's the largest (only?) Doctor Who convention in the New York area. A 3-day weekend of panels, guests, and general who's Who out on the Island! (That's Long Island to you non NYC residents). It was held at the Clarion Hotel in Ronkonkoma right near the Airport. I only went for 1 day, but boy, I had a blast!
In honor of our exclusive Doctor Who releases in July, We're excited to throw a Doctor Who Day Party at Midtown Comics Downtown on Saturday, August 2nd!


text:
Home Shop Art & Architecture Forgotten Masterpieces
Forgotten Masterpieces
Dalrymple, William
As the East India Company extended its sway across India in the late eighteenth century, many remarkable artworks were commissioned by Company officials from Indian painters who had previously worked for the Mughals. Published to coincide with the first UK exhibition of these masterworks at The Wallace Collection, this book celebrates the work of a series of extraordinary Indian artists, each with their own style and tastes and agency, all of whom worked for British patrons between the 1770s and the bloody end of the Mughal rule in 1857.
ISBN: 9781781301012 Category: Art & Architecture Tags: Exhibition catalogues & specific collections, Painting & paintings
As the East India Company extended its sway across India in the late eighteenth century, many remarkable artworks were commissioned by Company officials from Indian painters who had previously worked for the Mughals. Published to coincide with the first UK exhibition of these masterworks at The Wallace Collection, this book celebrates the work of a series of extraordinary Indian artists, each with their own style and tastes and agency, all of whom worked for British patrons between the 1770s and the bloody end of the Mughal rule in 1857. Edited by writer and historian William Dalrymple, these hybrid paintings explore both the beauty of the Indian natural world and the social realities of the time in one hundred masterpieces, often of astonishing brilliance and originality. They shed light on a forgotten moment in Anglo-Indian history during which Indian artists responded to European influences while keeping intact their own artistic visions and styles. These artists represent the last phase of Indian artistic genius before the onset of the twin assaults – photography and the influence of western colonial art schools – ended an unbroken tradition of painting going back two thousand years. As these masterworks show, the greatest of these painters deserve to be remembered as among the most remarkable Indian artists of all time.
PHILIP WILSON PUBLISHERS
College – higher education / Code: F
Colour Library Munch
Colour Library Magritte
Oxford Sketchbook


text:
Blog Categories Blurbs From The Net Listen To New NINE INCH NAILS Song 'God Break Down The Door'
Listen To New NINE INCH NAILS Song 'God Break Down The Door' Thursday May 17 2018, 10:47 PM
NINE INCH NAILS will release a new EP, "Bad Witch", on June 22. The six-track release is billed as the final installment of a trilogy, following 2016's "Not The Actual Events" and 2017's "Add Violence".
The first single from "Bad Witch", track called "God Break Down The Door", can be streamed below.
In an interview with Beats 1's Zane Lowe, NINE INCH NAILS frontman Trent Reznor stated about his somewhat unique vocal approach on the new song: "We find if we don't watch ourselves, we tend to try to get somewhere comfortable, because it feels better. And from the sound of the drums to the kind of frantic drumbeat to looking around the studio and seeing the untouched baritone tenor and alto sax that are sitting there, they're there because they remind me that I can't play them as well as I used to be able to. For 20 years, I've been saying I'm going to really get my technique back because it would be fun to do. And there they sit taunting me in the corner. We pulled them out and we just started fucking around, really, led with Atticus [Ross] arranging. An hour performance kind of turned into this thing that felt like we hadn't been there before and that started to reveal a whole different character. The space changed and then we felt motivated. When it came time to sing, I was really just trying things out, just to see. I never had the courage to sing like that; I didn't know I could sing like that."
Reznor also spoke in more details about NIN's upcoming material, including the trilogy's evolution and where "Bad Witch" fits within it.
"Let me drop some cryptic information on you," he said. "The idea of this three EP thing was all to find truth in us figuring out who we are now and how we fit into the world. The first EP, 'Not The Actual Events', was meant to be from a personal, angry self-destructive reflection on that question and defining how I feel in a world. It feels stranger. Part of that's aging. Part of that's because the world is getting weirder. Finding your place in a world that looks different every day and reacting to that in the first EP through anger and self-destruction and sitting alone setting a match to your life. The second EP, 'Add Violence', was meant [in response] to the same question. But looking for answers externally. Maybe it's because of this and there's comfort in that. Maybe there's a reason things feel kind of crazy, and it's not that I'm insane [or] that I'm in a situation that's insane. There was the third EP which has grown into an LP ['Bad Witch']. The entire system has a much more bleak and pessimistic outlook, and I don't want to say too much because it gives away kind of the what the thing is. But it wasn't necessarily what we thought it was going to be when we started. I thought it was going to go more science fiction."
In support of the EP, NINE INCH NAILS will embark on the "Cold And Black And Infinite" 2018 North American tour. The trek will launch September 13 in Phoenix, Arizona and include two-night appearances at Colorado's Red Rocks (September 18-19), New York's Radio City Music Hall (October 13-14), and Chicago's Aragon Ballroom (October 25-26), wrapping with four dates at the Palladium in Los Angeles (December 7,8, 11 and 12).
Tickets to the tour at being offered at The Physical World presale events beginning on May 19 at each venue's box office (except for a two-night stand at Red Rocks, whose presale will be on May 20 at the Denver Coliseum box office).
All seats for the tour will be offered on an in-person, first-come-first-served basis only with a four-ticket limit per show.
Support at all dates will come from THE JESUS AND MARY CHAIN.
"Bad Witch" track listing:
01. Shit Mirror
02. Ahead Of Ourselves
03. Play The Goddamned Part
04. God Break Down The Door
05. I'm Not From This World
06. Over And Out
AURA NOIR to tour North America for the first time...
JUDAS PRIEST Will Be Part Of OZZY OSBOURNE's Tour In...
Phoenix Metallers MURKOCET Release 'Digging Mercy's...
John Corabi Says Generation Swine Was Motley Crue's...
DAVE MUSTAINE Clarifies His Comments About Gay Marriage
ETERNAL VOYAGER issue new album update and reveal...
DIS ORCUS set release date for FOREVER PLAGUED...
All That Remains Guitarist Oli Herbert Reportedly...


Rainbrother's debut album 'Tales From The Drought' out now!
Danish five-piece Rainbrother have released their endearing debut album Tales From The Drought, out now via General Bird and available to buy on iTunes and stream on Spotify.
To celebrate the release, the band have shared their latest single Juggler, which can be streamed via Rainbrother's Soundcloud page now.
The video for the band's previous single Blue premiered on The 405, which you can also watch via Rainbrother's YouTube channel along with the video for Break Out.
Tales From The Drought is out now via General Bird and is available to buy on iTunes and stream on Spotify.


These are some of the amazing clients we've worked with.
Please click on the logo to see what we have done for them.
Explorista Media is one of the preferred content vendors for Orbitz Worldwide, handling large SEO content projects. We've produced hundreds of optimised pages for their car rental and hotel platforms.
PROJECT DESCRIPTION: Explorista Media is one of the preferred content vendors for Orbitz Worldwide, handling large SEO content projects. We've produced hundreds of optimised pages for their car rental and hotel platforms.
We've worked with KLM to promote a mixture of their PR campaigns, as well as their destinations. We created content that performed exceptionally well in terms of click throughs and ROI.
PROJECT DESCRIPTION: We've worked with KLM to promote a mixture of their PR campaigns, as well as their destinations. We created content that performed exceptionally well in terms of click throughs and ROI.
We support ABNSave in their content marketing efforts, by crafting SEO-friendly content and help set the content direction for their blog.
CLIENT: ABNSave, an affiliate network of businesses, entrepreneurs, small business owners, and individuals located throughout the United States, Canada, and Europe.
PROJECT DESCRIPTION: We support ABNSave in their content marketing efforts, by crafting SEO-friendly content and help set the content direction for their blog.
– The 10 Most Jaw-Dropping Hiking Destinations in the U.S.
We managed the Expedia-powered project Surprise Trips, a start-up that sold mystery Expedia package deals in the UK. We were responsible for everything: the technical aspect, the content, the marketing, the social media, the PR, influencer marketing campaigns, and customer service.
CLIENT: Surprise Trips, an Expedia UK project.
PROJECT DESCRIPTION: We managed the Expedia-powered project Surprise Trips, a start-up that sold mystery Expedia package deals in the UK. We were responsible for everything: the technical aspect, the content, the marketing, the social media, the PR, influencer marketing campaigns, and customer service.
We've worked with Expedia UK/IE & NL/BE in many ways. We've managed SEO projects, produced SEO pages, engaging blog content, and handled social media, video and PR projects.
Expedia has hired us for a number of different services.
For Expedia UK have managed SEO projects: from the launch of new channels to overseeing a holiday package start up.
We produce SEO content for their hotel pages on an ongoing base.
We also have worked on content translations from Dutch to English.
We have also consulted them on the section 'City Diaries' on their Expedia Travel Blog. We shaped a new direction for the section to improve both the SEO as well as engagement with readers.
We have produced blog content for both the UK and NL blog.
We have collaborated with DFDS Seaways on creating content for the Explorista.nl travel blog, as well as creating video content of their services and the city of Newcastle.
PROJECT DESCRIPTION: In order to promote the city of Newcastle and DFDS Seaways ferry services, we created blog content for Explorista.nl and a promotional video for our client's use on social media.
CONTENT: You can see the video we made above or here. Below are some photos taken with the campaign and links to the respective blog posts.
DFDS Seaways Citytrip naar Newcastle: aanrader of niet?
We consulted with Nationaal Park Lauwersmeer on content and social strategy in order to create more awareness and draw more tourists to this part of the country.
CLIENT: Nationaal Park Lauwersmeer, a national park in the north of the Netherlands.
PROJECT DESCRIPTION: We consulted with Nationaal Park Lauwersmeer on content and social strategy in order to create more awareness and draw more tourists to this part of the country.
We have crafted their hashtag #lauwersmore, as well as created content and social media coverage of the park for the website Explorista.nl.
We have consulted Cine Travel on how best to utilize social media as well as co-managed their Facebook page.
CLIENT: Cine Travel, a company that produces high class destination and hotel videos.
PROJECT DESCRIPTION: We have consulted Cine Travel on how best to utilize social media as well as co-managed their Facebook page. We continue to work with them on an ongoing base, creating videos for our clients.
We were hired to contribute to their content marketing efforts, in the form of a blog. This consisted of translating English documents, as well as creating original Dutch content.
CLIENT: Care Plus, a worldwide expert in travel health products.
PROJECT DESCRIPTION: We were hired to contribute to their content marketing efforts, in the form of a blog. This consisted of translating English documents, as well as creating original Dutch content.
CONTENT: You can see some of the blog content we did below.


Virgin Australia has launched services from Australia to London via Los Angeles codesharing with Virgin Atlantic. Previously, only Virgin's partners Singapore Airlines or Etihad could take Velocity Frequent Flyers to London. Now, Virgin will fly customers from Brisbane, Sydney or Melbourne to Los Angeles followed by a Virgin Atlantic flight from Los Angeles to London on their Boeing 787 service.
It's great to see Virgin expanding their long haul network with additional codeshare routes. Unfortunately the flight timings don't work that well from Brisbane and will result in an 8 hour wait in LAX. A stopover could be added in LAX however to make the trip more appealing.
I would love to see a much more tightly integrated international network under the Virgin Australia and Virgin Atlantic brands. Virgin Australia starts flying to Hong Kong from Sydney shortly and already flies there from Melbourne. This could provide another opportunity to connect onto Virgin Atlantic services.


text:
Home / Medals / WWI / WW1 Pair. Herapath. Freemantle, Southampton. Army Ordnance Corps.
WW1 Pair. Herapath. Freemantle, Southampton. Army Ordnance Corps.
Correctly named 020098 Pte AE Herapth AOC
Albert Ernest Herapath was born the son of a boot repairer c 1895. In 1911, we find him living at 33 Millbrook Road, Shirley with his parents and working himself as a worker/shoe repairer.
He enlisted in July 1916 and the following August he was sent overseas to France where he was stationed at Le Havre on important duties in the workshop of the Railways Operative Department. He was de-mobbed in October 1919 when he then returned home to 16 Harold St, Freemantle, Southampton. The pair is his full entitlement.
He had married Maud Whalley in 1913 and is seen in 1939, living with her and again working as a shoe repairer in Harold St.
Albert died in 1963.
Medals are on original silk ribbons.
BWM, underage enlister. Royal Marine Artillery, George Lyons. Uxbridge.
WW1 Royal Navy Pair with LSGC. Menzies. Deptford. Aircraft Carriers.


Here are some songs that came from a few months of writing sessions with another local singer/songwriter. After 5 or 6 years of sitting on my ipod, I thought it would be fun to share with the public.
Please feel free to give the songs a listen… download them, share them, etc. Enjoy!!!
After several months of writing, recording and mixing… "Carousel" is finally done. Please feel free to download the songs listed below… THEY'RE FREE!!!! Also, make sure to check out the liner notes under the download section to read up about these songs and the album creation process. Enjoy!!!
At the end of every project that I work on, I take some time to think about the songs on the cd and what they mean to me. I think about these songs and I love to see how they have grown since the first time I wrote them. Most of the songs on "Caurosel" were written within the past year or so... it's been an interesting year for me... as most people do, I've had ups and downs. If anything, everything I've been through in the past year has made me stronger and (i hope) smarter. I've done things that I never thought I would get to do and I've been places that I never thought I'd go. What a perfect time to write an album right? I've had so many reasons to be inspired over the past year(or so) and I am so proud to share these songs with you.
I really feel that the songs on this cd are the best I have ever written. That's why I am offering the songs on this cd free for everyone to download. I want to share my music(and experiences) with anyone who cares to listen. Please feel free to take the time to download my songs and put them on your mp3 player, computer or burn a disc of them and take them where you go. Feel free to take my experiences, feelings and emotions and make them your own.
Another note that I would like to make about this album is that this is the first album that I have ever done where I did all of the performances on this with the exception of the drums. That's right!!! I wrote the songs, arranged them, played all of the instruments and, of course, sang every word. In a way, I had to play all of the parts out of neccesity, but I grew to love what I was doing and this experience has allowed me to express myself(musically) in ways that I never have before.
1. Since You Went Away: Opening track, one of my favorites. Surprisingly, I wrote this as a break up song, but it wasn't inspired from a break up. It was actually inspired by meeting someone and spending time with them. At some point, I thought what it would be like to lose this person I was with. What would I sing about? What would I want to say to that person? Thus, this song came out.
2. Everything: Possibly the BEST song I have ever written. I wrote this song at a beginning of a budding relationship. Lyrically and musically the most intricate piece of music I have ever recorded. Not because of any kind of crazy chord changes or inversions, but because of the massive amount of instruments being played. Also, I experimented with "huge" sounding vocal harmonies... similar to the likes of Queen and Def Leppard. So many of my influences are in this one. Again, this is probably the single best example of me as a songwriter/performer.
3. Caurosel: the title track fo this cd. I wrote this song last fall. I actually came up with the chorus while I was on the eliptical machine at the gym. How random is that? After I got home, I had the song written in about 30 minutes.
5. I Was OK: This is a huge departure from my normal style of pop rock. I wrote this about someone that I was seeing that told me that she wanted to date other people, but still have what we had. I said, "errrr... no thanks." A few days later, this song came out. When you are listening to it, check out the Bon Jovi reference towards the end of the song.
6. Blame You: I had originally written this for an other artist to sing on. We weren't really happy with the vocal lines that she was coming up with so we decided to scrap it. I finally decided that I would record this one on my own. That being said, I thought that this song would be a great "filler" song for the album. However, during the mix down sessions, I realized how much I really did like the song and how great everything fits together on it.
7. Break Your Heart: Another song about someone that I had dated in the past year. Out of all of the songs on this cd, this song was the one that took the least amount of time to write. I think I had everything written and recorded(from scratch) within a few hours. That being said, this is one of the songs that people gave me the best feedback on. People are saying that it is their favorite song of mine that they have ever heard. What do you think?
9. Everything (Reprise) - The title says it all. I took the song "Everything" and arranged it with different string lines to form a reprise of the original. I really like this version and I wish that I made it longer. It works for what it is though and I like that. If you listen to it with the volume way up, then you're going to hear all the little nuances of the music.
Well, that's pretty much it. I hope that you enjoy this album. It's been a fun journey for me. I'm looking forward to hearing your comments and feeback on the new cd. Thank you again and I hope you enjoy this.
All songs written, produced and arranged by John Mendoza.
Jaime Myerson: percussion on "Break Your Heart"
Mom, Dad , Vic... thank you for all of the support and help through the years, Dave and Caroline, Sarah, Gary and Laura, Harry and Dawn, Mikey Motorcycle and Jess, Owen and Fran, Andy V, Doug at Greyskied Studios, Jaime at Blackwood Recording, my boys in Identity(Andy, Cody, Harry, Antoine and Jordan), Germs, HelenaMaria, Adam and Leigh, Rosie and the rest of Team Sandone, Heather(s), Jon B Klear, Baimun and the rest of the crew on HCGJ, Amy(s), the DiFranco's, the Jaffe's(always love you bro).... and to the rest of my friend's and family. Thank you so much for your support!!!
I want to dedicate this album to everyone that has been a part of my life. You are the reason I am who I am today.