OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_c/] [synfull/] [traffic-generator/] [src/] [netstream/] [messages.cpp] - Blame information for rev 54

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 54 alirezamon
/*
2
 * message.cpp
3
 *
4
 *  Created on: Dec 13, 2009
5
 *      Author: sam
6
 */
7
 
8
#include "messages.h"
9
#include <cassert>
10
#include <cstdlib>
11
 
12
using namespace std;
13
 
14
SocketStream& operator<<(SocketStream& os, StreamMessage& msg)
15
{
16
#ifdef NS_DEBUG_EXTRA
17
    std::cout << "<MessageSend> Sending message: " << msg.type << ", size: " << msg.size << std::endl;
18
#endif
19
 
20
    // cork the connection
21
    int flag = 1;
22
    setsockopt (os.so, SOL_TCP, TCP_CORK, &flag, sizeof (flag));
23
 
24
    os.put(&(msg.size), sizeof(int));
25
    os.put(&msg, msg.size);
26
 
27
    // uncork the connection
28
    flag = 0;
29
    setsockopt (os.so, SOL_TCP, TCP_CORK, &flag, sizeof (flag));
30
 
31
    // os.flush();
32
 
33
    return os;
34
}
35
 
36
SocketStream& operator>>(SocketStream& is, StreamMessage*& msg)
37
{
38
#ifdef NS_DEBUG_EXTRA
39
    std::cout << "<MessageRecv> Waiting for message" << std::endl;
40
#endif
41
 
42
    int msgSize = -1;
43
    int gotBytes = is.get(&msgSize, sizeof(int));
44
 
45
    if (gotBytes != sizeof(int))
46
        return is;
47
 
48
    assert(msgSize > 0);
49
 
50
    msg = (StreamMessage*) malloc(msgSize);
51
    is.get(msg, msgSize);
52
 
53
 
54
#ifdef NS_DEBUG_EXTRA
55
    std::cout << "<MessageRecv> Got message: " << msg->type << std::endl;
56
#endif
57
 
58
    return is;
59
}
60
 
61
SocketStream& operator>>(SocketStream& is, StreamMessage& msg)
62
{
63
#ifdef NS_DEBUG_EXTRA
64
    std::cout << "<MessageRecvSync> Waiting for message" << std::endl;
65
#endif
66
 
67
    int msgSize = -1;
68
    int gotBytes = is.get(&msgSize, sizeof(int));
69
 
70
    if (gotBytes != sizeof(int))
71
        return is;
72
 
73
    //std::cout << "Debug: " << msgSize << " " << msg.size << std::endl;
74
    assert(msgSize == msg.size);
75
    is.get(&msg, msgSize);
76
 
77
#ifdef NS_DEBUG_EXTRA
78
    std::cout << "<MessageRecvSync> Got message: " << msg.type << std::endl;
79
#endif
80
 
81
    return is;
82
}
83
 
84
void StreamMessage::destroy(StreamMessage* msg)
85
{
86
    assert (msg != NULL);
87
    free(msg);
88
}
89
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.