summaryrefslogtreecommitdiff
path: root/banking.c
blob: 2562645ebd45edaa39040cdab570c6b577e46e27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <string.h>

#include "banking.h"
#include "ipc.h"

#include "dist.h"

void transfer(void * parent_data, local_id src, local_id dst, balance_t amount)
{
  my_info_t *me = (my_info_t *) parent_data;
  if( me->dist_info == NULL )
    return;

  TransferOrder order = {
    .s_src = src,
    .s_dst = dst,
    .s_amount = amount
  };

  Message msg = {
    .s_header = {
      .s_magic = MESSAGE_MAGIC,
      .s_payload_len = sizeof( order ),
      .s_type = TRANSFER,
      .s_local_time = get_physical_time()
    }
  };
	memcpy( msg.s_payload, &order, sizeof( order ) );

  send( me, src, &msg );
  if( !receive( me, dst, &msg ) ) {
    if( msg.s_header.s_type != ACK ) {
      return;
    }
  }

  return;
}