Reenviar todos sms entrantes

Buenos dias, tengo un problema que no soy capaz de resolver, la verdad es que me estoy iniciando en este gran mundo de la programacion pero aun ando muy perdido por favor sean pacientes conmigo.
Tengo un GSM sim900 con el manejo del estado de 2 relés sin problema enviando SMS “Encender” o “Apagar”, y me devuelve el estado. Pero necesito que me reenvie los sms entrantes y esto no lo consigo, este es el codigo que estoy usando

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "WideTextFinder.h"
SMSGSM sms;
SMSGSM sms_classname;

SoftwareSerial SIM900(7, 8); // Configura el puerto serie para el SIM900

char IsSMSPresent = 0;

char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
String mensaje = "";
String estado="";
int bloquearmandos=10;//salida 10 para bloquearmandos
int encendermaquinas=11;//salida 11 para encender/apagar maquinas

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

void setup()
{
pinMode( bloquearmandos, OUTPUT) ; // activa salida para bloquear mandos
pinMode( encendermaquinas, OUTPUT) ; // Actica salida para encender maquinas
   // Set pin modes
   pinMode(GSM_ON,OUTPUT);
   pinMode(GSM_RESET,OUTPUT);
inicializaSIM900();


            }
     

void loop()
{
 if (SIM900.available() > 0)
 {
   incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
   Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
   mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
 }
 

identifica_SMS();

if (IsSMSPresent = 1) {
  reenviarsms();
  }

}


void inicializaSIM900()
{
 //digitalWrite(9, HIGH);   // Descomentar para activar la alimentación de la tarjeta por Software
 //delay(1000);            
 //digitalWrite(9, LOW);
// delay (5000);
 SIM900.begin(9600); //Configura velocidad del puerto serie para el SIM900
 Serial.begin(9600); //Configura velocidad del puerto serie del Arduino
 Serial.println("OK");
 delay (1000);
 SIM900.println("AT + CPIN = \"\""); //Comando AT para introducir el PIN de la tarjeta
 delay(2500); //Tiempo para que encuentre una RED
 Serial.println("PIN OK");
 SIM900.print("AT+CLIP=1\r"); // Activa la identificación de llamada
 delay(100);
 SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
 delay(1000);
 SIM900.print("AT+CNMI=2,2,0,0,0\r"); // Saca el contenido del SMS por el puerto serie del GPRS
 delay(1000);
 
}

void identifica_SMS(){
  
 int led_on = mensaje.indexOf("Encender");
 int led_off = mensaje.indexOf("Apagar");
 
 if (led_on >= 0)
 {
       digitalWrite( bloquearmandos, HIGH) ;
       delay(3000);
       digitalWrite( encendermaquinas, HIGH);
       Serial.println("\nMaquinas encendidas");
       mensaje = "" ; //Bórralo para la próxima vez
       estado="Maquinas encendidas";
      envioMensaje(estado);
 }
 if (led_off >= 0)
 {
       digitalWrite( encendermaquinas, LOW) ;
       delay(3000);
       digitalWrite( bloquearmandos, LOW);
       Serial.println("\nMaquinas apagadas");
       mensaje = "" ; //Bórralo para la próxima vez
       estado="Maquinas apagadas";
      envioMensaje(estado);
 }
}

void envioMensaje(String estado) {
  SIM900.println("AT + CMGS = \"665xxxxxx\"");//reemplzar por el número a enviar el mensaje
  delay(200);
  SIM900.println("Estado:" + estado );// Reemplzar por el texto a enviar
  delay(200);
  //Finalizamos este comando con el caracter de sustitución (→) código Ascii 26 para el envio del SMS
  SIM900.println((char)26); 
  delay(200);
  SIM900.println();
}

void reenviarsms(){
  Serial.println("Enviando SMS");
  SIM900.println("AT + CMGS = \"665xxxxxx\"");//reemplzar por el número a enviar el mensaje
  delay(200);
  SIM900.println("Estado:" + mensaje + incoming_char);// Reemplzar por el texto a enviar
  delay(200);
    //Finalizamos este comando con el caracter de sustitución (→) código Ascii 26 para el envio del SMS
  SIM900.println((char)26); 
  delay(200);
  SIM900.println();
  Serial.println("SMS enviado");
}

 int enviarAT(String ATcommand, char* resp_correcta, unsigned int tiempo)
{
  int x = 0;
  bool correcto = 0;
  char respuesta[100];
  unsigned long anterior;

  memset(respuesta, '\0', 100); // Inicializa el string
  delay(100);
  while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada
  SIM900.println(ATcommand); // Envia el comando AT
  x = 0;
  anterior = millis();
  // Espera una respuesta
  do {
    // si hay datos el buffer de entrada del UART lee y comprueba la respuesta
    if (SIM900.available() != 0)
    {
        respuesta[x] = SIM900.read();
        x++;
      // Comprueba si la respuesta es correcta
      if (strstr(respuesta, resp_correcta) != NULL)
      {
        correcto = 1;
      }
    }
  }
  // Espera hasta tener una respuesta
  while ((correcto == 0) && ((millis() - anterior) < tiempo));
  Serial.println(respuesta);

  return correcto;
}

sé que tendre bastantes errores en el codigo, soy muy novato,
Creó que el problema es que no sé manejar la instrucción “isSMSPresent” y la funcion “reenviarsms ()” no se si hará lo que pretendo de reenviar el SMS entero.
agradezco cualquier ayuda.
Saludos.

Wowww que gran foro¡¡¡¡¡ 0 repuestas en casi 1 mes y casi 500 lecturas, de gran utilidad si señor