* @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
*/
+#include "imgNum2volumeId.h"
+
generic module DelugeManagerP()
{
uses {
{
SerialReqPacket *request = (SerialReqPacket *)payload;
memset(&delugeCmd, 0, sizeof(DelugeCmd));
-
call stop();
delugeCmd.type = request->cmd;
+ // Converts the image number that the user wants to the real image number
+ request->imgNum = imgNum2volumeId(request->imgNum);
switch (request->cmd) {
case DELUGE_CMD_STOP:
break;
case DELUGE_CMD_ONLY_DISSEMINATE:
case DELUGE_CMD_DISSEMINATE_AND_REPROGRAM:
- if (call Resource.immediateRequest() == SUCCESS) {
+ if (request->imgNum != NON_DELUGE_VOLUME &&
+ (call Resource.isOwner() ||
+ call Resource.immediateRequest() == SUCCESS)) {
call DelugeMetadata.read(request->imgNum);
} else {
sendReply(FAIL);
break;
case DELUGE_CMD_REPROGRAM:
case DELUGE_CMD_REBOOT:
+ if (request->imgNum == NON_DELUGE_VOLUME) {
+ sendReply(FAIL);
+ break;
+ }
delugeCmd.imgNum = request->imgNum;
call DelayTimer.startOneShot(1024);
sendReply(SUCCESS);